#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>

in_addr_t inet_network(const char* p) { return ntohl(inet_addr(p)); }

struct in_addr inet_makeaddr(in_addr_t n, in_addr_t h) {
  if (n < 256)
    h |= n << 24;
  else if (n < 65536)
    h |= n << 16;
  else
    h |= n << 8;
  return (struct in_addr){h};
}

in_addr_t inet_lnaof(struct in_addr in) {
  uint32_t h = in.s_addr;
  if (h >> 24 < 128)
    return h & 0xffffff;
  if (h >> 24 < 192)
    return h & 0xffff;
  return h & 0xff;
}

in_addr_t inet_netof(struct in_addr in) {
  uint32_t h = in.s_addr;
  if (h >> 24 < 128)
    return h >> 24;
  if (h >> 24 < 192)
    return h >> 16;
  return h >> 8;
}
