Index: iwyu_include_picker.cc
--- iwyu_include_picker.cc.orig
+++ iwyu_include_picker.cc
@@ -124,7 +124,6 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "imaxdiv_t", kPrivate, "<inttypes.h>", kPublic },
   { "intmax_t", kPrivate, "<stdint.h>", kPublic },
   { "uintmax_t", kPrivate, "<stdint.h>", kPublic },
-  { "ino64_t", kPrivate, "<sys/types.h>", kPublic },
   { "ino_t", kPrivate, "<sys/types.h>", kPublic },
   { "int8_t", kPrivate, "<stdint.h>", kPublic },
   { "int16_t", kPrivate, "<stdint.h>", kPublic },
@@ -147,7 +146,6 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "nlink_t", kPrivate, "<sys/types.h>", kPublic },
   { "ntohl", kPrivate, "<arpa/inet.h>", kPublic },
   { "ntohs", kPrivate, "<arpa/inet.h>", kPublic },
-  { "off64_t", kPrivate, "<sys/types.h>", kPublic },
   { "off_t", kPrivate, "<sys/types.h>", kPublic },
   { "optarg", kPrivate, "<unistd.h>", kPublic },
   { "opterr", kPrivate, "<unistd.h>", kPublic },
@@ -161,10 +159,8 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "sig_atomic_t", kPrivate, "<signal.h>", kPublic },
   { "sigevent", kPrivate, "<signal.h>", kPublic },
   { "siginfo_t", kPrivate, "<signal.h>", kPublic },
-  { "sigset_t", kPrivate, "<signal.h>", kPublic },
   { "sigval", kPrivate, "<signal.h>", kPublic },
   { "sockaddr", kPrivate, "<sys/socket.h>", kPublic },
-  { "socklen_t", kPrivate, "<sys/socket.h>", kPublic },
   { "ssize_t", kPrivate, "<sys/types.h>", kPublic },
   { "stack_t", kPrivate, "<signal.h>", kPublic },
   { "stat", kPrivate, "<sys/stat.h>", kPublic },
@@ -190,6 +186,7 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "size_t", kPrivate, "<time.h>", kPublic },
   { "size_t", kPrivate, "<uchar.h>", kPublic },
   { "size_t", kPrivate, "<wchar.h>", kPublic },
+  { "size_t", kPrivate, "<sys/types.h>", kPublic },
   // Macros that can be defined in more than one file, don't have the
   // same __foo_defined guard that other types do, so the grep above
   // doesn't discover them.  Until I figure out a better way, I just
@@ -216,6 +213,10 @@ const IncludeMapEntry libc_symbol_map[] = {
   { "calloc", kPrivate, "<stdlib.h>", kPublic },
   { "realloc", kPrivate, "<stdlib.h>", kPublic },
   { "free", kPrivate, "<stdlib.h>", kPublic },
+  { "htonl", kPrivate, "<arpa/inet.h>", kPublic },
+  { "htons", kPrivate, "<arpa/inet.h>", kPublic },
+  { "ntohl", kPrivate, "<arpa/inet.h>", kPublic },
+  { "ntohs", kPrivate, "<arpa/inet.h>", kPublic },
   // Entries for NULL
   { "NULL", kPrivate, "<stddef.h>", kPublic },  // 'canonical' location for NULL
   { "NULL", kPrivate, "<clocale>", kPublic },
@@ -279,7 +280,7 @@ const IncludeMapEntry libstdcpp_symbol_map[] = {
   { "std::declval", kPrivate, "<utility>", kPublic },
 };
 
-const IncludeMapEntry libc_include_map[] = {
+const IncludeMapEntry glibc_include_map[] = {
   // Private -> public include mappings for GNU libc
   // ( cd /usr/include && grep '^ *# *include' {sys/,net/,}* | perl -nle 'm/^([^:]+).*<([^>]+)>/ && print qq@    { "<$2>", kPrivate, "<$1>", kPublic },@' | grep bits/ | sort )
   // When I saw more than one mapping for these, I typically picked
@@ -493,6 +494,42 @@ const IncludeMapEntry libc_include_map[] = {
   { "<sys/ucontext.h>", kPrivate, "<ucontext.h>", kPublic },
   // Exports guaranteed by the C standard
   { "<stdint.h>", kPublic, "<inttypes.h>", kPublic },
+};
+
+// Private -> public include mappings for OpenBSD libc
+const IncludeMapEntry libc_include_map[] = {
+  { "<machine/_float.h>", kPrivate, "<float.h>", kPublic },
+  { "<machine/_types.h>", kPrivate, "<sys/_types.h>", kPrivate },
+  { "<machine/atomic.h>", kPrivate, "<sys/atomic.h>", kPublic },
+  { "<machine/cdefs.h>", kPrivate, "<sys/cdefs.h>", kPublic },
+  { "<machine/disklabel.h>", kPrivate, "<sys/disklabel.h>", kPublic },
+  { "<machine/endian.h>", kPrivate, "<sys/endian.h>", kPrivate },
+  { "<machine/limits.h>", kPrivate, "<sys/limits.h>", kPrivate },
+  { "<machine/param.h>", kPrivate, "<sys/param.h>", kPublic },
+  { "<machine/ptrace.h>", kPrivate, "<sys/ptrace.h>", kPublic },
+  { "<machine/signal.h>", kPrivate, "<sys/signal.h>", kPrivate },
+  { "<machine/stdarg.h>", kPrivate, "<sys/stdarg.h>", kPrivate },
+  { "<machine/stdint.h>", kPrivate, "<sys/stdint.h>", kPrivate },
+  { "<machine/varargs.h>", kPrivate, "<sys/varags.h>", kPrivate },
+  { "<netinet6/in6.h>", kPrivate, "<netinet/in.h>", kPublic },
+  { "<sys/_endian.h>", kPrivate, "<sys/endian.h>", kPrivate },
+  { "<sys/_time.h>", kPrivate, "<time.h>", kPublic },
+  { "<sys/_types.h>", kPrivate, "<sys/types.h>", kPublic },
+  { "<sys/endian.h>", kPrivate, "<endian.h>", kPublic },
+  { "<sys/dirent.h>", kPrivate, "<dirent.h>", kPublic },
+  { "<sys/errno.h>", kPrivate, "<errno.h>", kPublic },
+  { "<sys/fcntl.h>", kPrivate, "<fcntl.h>", kPublic },
+  { "<sys/limits.h>", kPrivate, "<limits.h>", kPublic },
+  { "<sys/poll.h>", kPrivate, "<poll.h>", kPublic },
+  { "<sys/signal.h>", kPrivate, "<signal.h>", kPublic },
+  { "<sys/stdarg.h>", kPrivate, "<stdarg.h>", kPublic },
+  { "<sys/stdint.h>", kPrivate, "<stdint.h>", kPublic },
+  { "<sys/syslimits.h>", kPrivate, "<limits.h>", kPublic },
+  { "<sys/syslog.h>", kPrivate, "<syslog.h>", kPublic },
+  { "<sys/termios.h>", kPrivate, "<termios.h>", kPublic },
+  { "<sys/unistd.h>", kPrivate, "<unistd.h>", kPublic },
+  { "<sys/uuid.h>", kPrivate, "<uuid.h>", kPublic },
+  { "<sys/varargs.h>", kPrivate, "<varargs.h>", kPublic },
 };
 
 const IncludeMapEntry stdlib_c_include_map[] = {
