From fca0c242e4edfdb05231ef18d60c14273067ff0a Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Fri, 13 Jan 2017 07:57:46 -0800 Subject: DHCPv[46] proxy tests Change-Id: I6aaf9c602cd515ed9d4416d286f9191d048c1a87 Signed-off-by: Neale Ranns --- src/vnet/dhcp/proxy_node.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/vnet/dhcp') diff --git a/src/vnet/dhcp/proxy_node.c b/src/vnet/dhcp/proxy_node.c index d0d99d7e..6a58fcdb 100644 --- a/src/vnet/dhcp/proxy_node.c +++ b/src/vnet/dhcp/proxy_node.c @@ -703,6 +703,12 @@ int dhcp_proxy_set_server_2 (ip4_address_t *addr, ip4_address_t *src_address, dhcp_server_t * server = 0; u32 server_index = 0; u32 rx_fib_index = 0; + const fib_prefix_t all_1s = + { + .fp_len = 32, + .fp_addr.ip4.as_u32 = 0xffffffff, + .fp_proto = FIB_PROTOCOL_IP4, + }; if (addr->as_u32 == 0) return VNET_API_ERROR_INVALID_DST_ADDRESS; @@ -720,8 +726,18 @@ int dhcp_proxy_set_server_2 (ip4_address_t *addr, ip4_address_t *src_address, if (is_del) { memset (server, 0, sizeof (*server)); - return 0; + fib_table_entry_special_remove(rx_fib_index, + &all_1s, + FIB_SOURCE_DHCP); + return 0; } + if (!server->valid) + fib_table_entry_special_add(rx_fib_index, + &all_1s, + FIB_SOURCE_DHCP, + FIB_ENTRY_FLAG_LOCAL, + ADJ_INDEX_INVALID); + goto initialize_it; } @@ -738,6 +754,11 @@ int dhcp_proxy_set_server_2 (ip4_address_t *addr, ip4_address_t *src_address, server = pool_elt_at_index (dpm->dhcp_servers, server_index); memset (server, 0, sizeof (*server)); pool_put (dpm->dhcp_servers, server); + + fib_table_entry_special_remove(rx_fib_index, + &all_1s, + FIB_SOURCE_DHCP); + return 0; } @@ -752,9 +773,16 @@ int dhcp_proxy_set_server_2 (ip4_address_t *addr, ip4_address_t *src_address, } pool_get (dpm->dhcp_servers, server); + + fib_table_entry_special_add(rx_fib_index, + &all_1s, + FIB_SOURCE_DHCP, + FIB_ENTRY_FLAG_LOCAL, + ADJ_INDEX_INVALID); initialize_it: + server->dhcp_server.as_u32 = addr->as_u32; server->server_fib_index = fib_table_find_or_create_and_lock(FIB_PROTOCOL_IP4, -- cgit 1.2.3-korg