summaryrefslogtreecommitdiffhomepage
path: root/interface-ip.h
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-09-05 05:49:11 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-09-05 05:49:11 +0200
commit818abd9f2f42c36a0f91ff6d29a9a635398216e0 (patch)
tree93d798fa855cc8acc6bbd5754ab2b50186ef42c2 /interface-ip.h
parentf026eb8247d74f88a6b704af866879867574f9f0 (diff)
move ip related functions and data structures to a separate header file
Diffstat (limited to 'interface-ip.h')
-rw-r--r--interface-ip.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/interface-ip.h b/interface-ip.h
new file mode 100644
index 0000000..2f5cf85
--- /dev/null
+++ b/interface-ip.h
@@ -0,0 +1,48 @@
+#ifndef __INTERFACE_IP_H
+#define __INTERFACE_IP_H
+
+enum device_addr_flags {
+ /* address family for routes and addresses */
+ DEVADDR_INET4 = (0 << 0),
+ DEVADDR_INET6 = (1 << 0),
+ DEVADDR_FAMILY = DEVADDR_INET4 | DEVADDR_INET6,
+
+ /* device route (no gateway) */
+ DEVADDR_DEVICE = (1 << 1),
+};
+
+union if_addr {
+ struct in_addr in;
+ struct in6_addr in6;
+};
+
+struct device_addr {
+ struct list_head list;
+ void *ctx;
+
+ enum device_addr_flags flags;
+
+ unsigned int mask;
+ union if_addr addr;
+};
+
+struct device_route {
+ struct list_head list;
+ void *ctx;
+
+ enum device_addr_flags flags;
+
+ unsigned int mask;
+ union if_addr addr;
+ union if_addr nexthop;
+};
+
+int interface_add_address(struct interface *iface, struct device_addr *addr);
+void interface_del_address(struct interface *iface, struct device_addr *addr);
+void interface_del_ctx_addr(struct interface *iface, void *ctx);
+
+int interface_add_route(struct interface *iface, struct device_route *route);
+void interface_del_route(struct interface *iface, struct device_route *route);
+void interface_del_all_routes(struct interface *iface);
+
+#endif