From 58d2488ffe9553b908d3e10826376adeeb55d67b Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 12 Sep 2011 11:50:03 +0200 Subject: [PATCH 1/1] add support for externally managed ip addresses and routes --- interface-ip.c | 12 ++++++++---- interface-ip.h | 11 +++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/interface-ip.c b/interface-ip.c index e651d39..2e2e9d8 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -24,13 +24,15 @@ interface_update_proto_addr(struct vlist_tree *tree, if (node_old) { addr = container_of(node_old, struct device_addr, node); - system_del_address(dev, addr); + if (!(addr->flags & DEVADDR_EXTERNAL)) + system_del_address(dev, addr); free(addr); } if (node_new) { addr = container_of(node_new, struct device_addr, node); - system_add_address(dev, addr); + if (!(addr->flags & DEVADDR_EXTERNAL)) + system_add_address(dev, addr); } } @@ -48,13 +50,15 @@ interface_update_proto_route(struct vlist_tree *tree, if (node_old) { route = container_of(node_old, struct device_route, node); - system_del_route(dev, route); + if (!(route->flags & DEVADDR_EXTERNAL)) + system_del_route(dev, route); free(route); } if (node_new) { route = container_of(node_new, struct device_route, node); - system_add_route(dev, route); + if (!(route->flags & DEVADDR_EXTERNAL)) + system_add_route(dev, route); } } diff --git a/interface-ip.h b/interface-ip.h index 9266727..bf2cf73 100644 --- a/interface-ip.h +++ b/interface-ip.h @@ -3,12 +3,15 @@ enum device_addr_flags { /* address family for routes and addresses */ - DEVADDR_INET4 = (0 << 0), - DEVADDR_INET6 = (1 << 0), - DEVADDR_FAMILY = DEVADDR_INET4 | DEVADDR_INET6, + DEVADDR_INET4 = (0 << 0), + DEVADDR_INET6 = (1 << 0), + DEVADDR_FAMILY = DEVADDR_INET4 | DEVADDR_INET6, /* device route (no gateway) */ - DEVADDR_DEVICE = (1 << 1), + DEVADDR_DEVICE = (1 << 1), + + /* externally added address */ + DEVADDR_EXTERNAL = (1 << 2), }; union if_addr { -- 2.11.0