add patch to remove secondary ip addresses when curl-loader exit
Status: Alpha
Brought to you by:
coroberti
From: Vincent Li <vin...@gm...> - 2013-04-03 19:33:18
|
Hi, I am using curl-loader to test web services, I like the feature that curl-loader creating secondary ip addresses, is it possible to remove these ip addresses after each curl-loader run automatically because it may create ip conflict in my environment when I run curl-loader from another box using same secondary ip addresses. I am still rough with C and I have an incomplete patch idea to remove secondary ip addresses when SIGINT received from keyboard, the idea is to add a bool parameter to create_ip_addrs and pass it on to add_secondary_ip_addrs and add_secondary_ip_to_device, when the bool parameter is 0 (false), then remove secondary ip addresses, but I am not sure where to call create_ip_addrs properly with the bool parameter false with the batch contexts info, etc. could anyone shed on light on how to do this? here is my half baked patch against curl-loader-0.56: diff --git a/ip_secondary.c b/ip_secondary.c index ffd1e2d..7def472 100644 --- a/ip_secondary.c +++ b/ip_secondary.c @@ -147,7 +147,7 @@ typedef struct ********************************************************************************/ int add_secondary_ip_to_device(const char*const device, const char*const ip_slash_mask, - char* scope) + char* scope, bool add) { request req; @@ -168,7 +168,7 @@ int add_secondary_ip_to_device(const char*const device, req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); req.n.nlmsg_flags = NLM_F_REQUEST; - req.n.nlmsg_type = RTM_NEWADDR; + req.n.nlmsg_type = add ? RTM_NEWADDR : RTM_DELADDR; req.ifa.ifa_family = AF_UNSPEC; get_prefix(&lcl, (char*)ip_slash_mask, req.ifa.ifa_family); @@ -891,7 +891,7 @@ int add_secondary_ip_addrs (const char*const interface, int addr_number, const char**const addresses, int netmask, - char* addr_scope) + char* addr_scope, bool add) { char ip_slash_mask_buffer[64]; int j = 0, rval_set_ip = -1; @@ -907,7 +907,7 @@ int add_secondary_ip_addrs (const char*const interface, rval_set_ip = add_secondary_ip_to_device (interface, ip_slash_mask_buffer, - addr_scope); + addr_scope, add); switch (rval_set_ip) { diff --git a/loader.c b/loader.c index eb852b7..cfbfc27 100644 --- a/loader.c +++ b/loader.c @@ -69,7 +69,7 @@ static size_t do_nothing_write_func (void *ptr, size_t nmemb, void *stream); -static int create_ip_addrs (batch_context* bctx, int bctx_num); +static int create_ip_addrs (batch_context* bctx, int bctx_num, bool add); static void* batch_function (void *batch_data); static int initial_handles_init (struct client_context*const cdata); @@ -179,7 +179,7 @@ main (int argc, char *argv []) Add ip-addresses to the loading network interfaces and keep them in batch-contexts. */ - if (create_ip_addrs (bc_arr, batches_num) == -1) + if (create_ip_addrs (bc_arr, batches_num, 1) == -1) { fprintf (stderr, "%s - error: create_ip_addrs () failed. \n", __func__); return -1; @@ -1717,7 +1717,7 @@ static void free_url (url_context* url, int clients_max) * bctx_num - number of batch contexts in <bctx_array> * Return Code/Output - None *******************************************************************************/ -static int create_ip_addrs (batch_context* bctx_array, int bctx_num) +static int create_ip_addrs (batch_context* bctx_array, int bctx_num, bool add) { int batch_index, client_index; /* Batch and client indexes */ char*** ip_addresses =0; @@ -1777,7 +1777,7 @@ static int create_ip_addrs (batch_context* bctx_array, int bctx_num) bctx->client_num_max, (const char** const) ip_addresses[batch_index], bctx->cidr_netmask, - bctx->scope) == -1) + bctx->scope, add) == -1) { fprintf (stderr, "%s - error: add_secondary_ip_addrs() - failed for batch = %d\n", diff --git a/loader.h b/loader.h index 47c2130..eac70aa 100644 --- a/loader.h +++ b/loader.h @@ -44,6 +44,7 @@ struct client_context; struct batch_context; struct stat_point; struct timer_node; +typedef _Bool bool; /*--------- Common loading functions ----------------*/ @@ -120,7 +121,7 @@ int response_logfiles_set (struct client_context* cctx, struct url_context* url) ********************************************************************************/ int add_secondary_ip_to_device (const char*const device, const char*const ip_slash_mask, - char* scope); + char* scope, bool add); /******************************************************************************* * Function name - add_secondary_ip_addrs @@ -138,7 +139,7 @@ int add_secondary_ip_addrs (const char*const interface, int addr_number, const char**const addresses, int netmask, - char* scope); + char* scope, bool add); /******************************************************************************* * Function name - parse_config_file Thanks in advance! |