initial checkin
diff --git a/osysmon.h b/osysmon.h
new file mode 100644
index 0000000..d9d1a11
--- /dev/null
+++ b/osysmon.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <osmocom/core/select.h>
+#include <osmocom/core/utils.h>
+
+#include <stdbool.h>
+#include <linux/if.h>
+
+/* information gathered from sysinfo(2) */
+struct osysmon_state_sysinfo {
+	unsigned long uptime_secs;
+	unsigned long loads[3];
+	unsigned long freeram;
+};
+
+/* one network interface */
+struct osysmon_state_iface {
+	char name[IFNAMSIZ+1];
+	uint32_t flags;	/* enum net_device_flags IFF_* */
+	uint8_t hwasddr[6];
+	uint32_t ipaddr;
+};
+
+/* information gathered from RTNL via libmnl */
+struct osysmon_state_rtnl {
+	struct osysmon_state_iface iface[8];
+	unsigned int num_iface;
+	struct {
+		char *ifname;
+		uint32_t ipaddr;
+	} default_route;
+};
+
+struct osysmon_state_gbproxy {
+	char ns_state[32];
+	char bssgp_state[32];
+};
+
+struct osysmon_state_bts {
+	bool rf_locked;
+};
+
+struct osysmon_state_bsc {
+	struct osysmon_state_bts bts[8];
+	unsigned int num_bts;
+	char a_state[32];
+};
+
+struct osysmon_state {
+	struct osysmon_state_sysinfo sysinfo;
+	struct osysmon_state_rtnl rtnl;
+	struct osysmon_state_rtnl gbproxy;
+	struct osysmon_state_rtnl bsc;
+};