Re: 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 21:14:13
|
I added the create_ip_addrs(bctx, 1, 0) in dump_snapshot_interval_and_advance_total_statistics in statistics.c if (stop_loading) { dump_final_statistics (bctx->cctx_array); screen_release (); create_ip_addrs (bctx, 1, 0); exit (1); } that appears does the job to remove secondary ip addresses, but I am not sure if it is the optimal way to do it. Vincent On Wed, Apr 3, 2013 at 12:33 PM, Vincent Li <vin...@gm...> wrote: > 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! > |