#include <stdint.h>

/* linux/netlink.h */

#define NETLINK_ROUTE 0

struct nlmsghdr {
  uint32_t nlmsg_len;
  uint16_t nlmsg_type;
  uint16_t nlmsg_flags;
  uint32_t nlmsg_seq;
  uint32_t nlmsg_pid;
};

#define NLM_F_REQUEST 1
#define NLM_F_MULTI 2
#define NLM_F_ACK 4

#define NLM_F_ROOT 0x100
#define NLM_F_MATCH 0x200
#define NLM_F_ATOMIC 0x400
#define NLM_F_DUMP (NLM_F_ROOT | NLM_F_MATCH)

#define NLMSG_NOOP 0x1
#define NLMSG_ERROR 0x2
#define NLMSG_DONE 0x3
#define NLMSG_OVERRUN 0x4

/* linux/rtnetlink.h */

#define RTM_NEWLINK 16
#define RTM_GETLINK 18
#define RTM_NEWADDR 20
#define RTM_GETADDR 22

struct rtattr {
  unsigned short rta_len;
  unsigned short rta_type;
};

struct rtgenmsg {
  unsigned char rtgen_family;
};

struct ifinfomsg {
  unsigned char ifi_family;
  unsigned char __ifi_pad;
  unsigned short ifi_type;
  int ifi_index;
  unsigned ifi_flags;
  unsigned ifi_change;
};

/* linux/if_link.h */

#define IFLA_ADDRESS 1
#define IFLA_BROADCAST 2
#define IFLA_IFNAME 3
#define IFLA_STATS 7

/* linux/if_addr.h */

struct ifaddrmsg {
  uint8_t ifa_family;
  uint8_t ifa_prefixlen;
  uint8_t ifa_flags;
  uint8_t ifa_scope;
  uint32_t ifa_index;
};

#define IFA_ADDRESS 1
#define IFA_LOCAL 2
#define IFA_LABEL 3
#define IFA_BROADCAST 4

/* musl */

#define NETLINK_ALIGN(len) (((len) + 3) & ~3)
#define NLMSG_DATA(nlh) ((void*)((char*)(nlh) + sizeof(struct nlmsghdr)))
#define NLMSG_DATALEN(nlh) ((nlh)->nlmsg_len - sizeof(struct nlmsghdr))
#define NLMSG_DATAEND(nlh) ((char*)(nlh) + (nlh)->nlmsg_len)
#define NLMSG_NEXT(nlh) \
  (struct nlmsghdr*)((char*)(nlh) + NETLINK_ALIGN((nlh)->nlmsg_len))
#define NLMSG_OK(nlh, end) \
  ((char*)(end) - (char*)(nlh) >= sizeof(struct nlmsghdr))

#define RTA_DATA(rta) ((void*)((char*)(rta) + sizeof(struct rtattr)))
#define RTA_DATALEN(rta) ((rta)->rta_len - sizeof(struct rtattr))
#define RTA_DATAEND(rta) ((char*)(rta) + (rta)->rta_len)
#define RTA_NEXT(rta) \
  (struct rtattr*)((char*)(rta) + NETLINK_ALIGN((rta)->rta_len))
#define RTA_OK(nlh, end) ((char*)(end) - (char*)(rta) >= sizeof(struct rtattr))

#define NLMSG_RTA(nlh, len) \
  ((void*)((char*)(nlh) + sizeof(struct nlmsghdr) + NETLINK_ALIGN(len)))
#define NLMSG_RTAOK(rta, nlh) RTA_OK(rta, NLMSG_DATAEND(nlh))

int __rtnetlink_enumerate(int link_af,
                          int addr_af,
                          int (*cb)(void* ctx, struct nlmsghdr* h),
                          void* ctx);
