Thread: [dhcp-agent-commits] dhcp-agent/src dhcp-client-guile.c,1.6,1.7
Status: Alpha
Brought to you by:
actmodern
From: <act...@us...> - 2003-06-08 22:15:27
|
Update of /cvsroot/dhcp-agent/dhcp-agent/src In directory sc8-pr-cvs1:/tmp/cvs-serv22796/src Modified Files: dhcp-client-guile.c Log Message: sysconf now does latency checking before adding default route Index: dhcp-client-guile.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/src/dhcp-client-guile.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dhcp-client-guile.c 23 May 2003 03:31:16 -0000 1.6 --- dhcp-client-guile.c 8 Jun 2003 22:15:24 -0000 1.7 *************** *** 73,76 **** --- 73,146 ---- } + /* * * * * * * * * * * * * * * * * * * * * * * + * list conversions. we need to do a few * + * of these to support some of the internal * + * routines. * + * * * * * * * * * * * * * * * * * * * * * * */ + + static list_t *guile_address_list_to_internal_list(SCM scm_address_list) + { + char *address_string; + int list_length, i; + SCM scm_list_length; + SCM scm_address_string; + ip_addr_t *ip_address; + list_t *address_list; + + SCM_ASSERT(SCM_CONSP(scm_address_list), scm_address_list, + SCM_ARG1, "guile_address_list_to_internal_list"); + + scm_list_length = scm_length(scm_address_list); + list_length = scm_num2int(scm_list_length, SCM_ARG1, "guile_address_list_to_internal_list"); + + address_list = list_create(); + + for(i = 0;i < list_length;i++) { + scm_address_string = scm_list_ref(scm_address_list, SCM_MAKINUM(i)); + address_string = x_scm_string2newstr(scm_address_string); + + ip_address = string_ip_to_ip_addr(address_string); + list_add_to_end(address_list, ip_address); + xfree(address_string); + + } + + return address_list; + } + + /* take a latency list: a list of integer latency values followed + * by an address, and convert it to a numeric value for integers, + * and a string value for the address. */ + + static SCM internal_latency_list_to_guile_latency_list(list_t *latency_list) + { + int *latency; + ip_addr_t *address; + char *address_string; + SCM scm_inum_latency; + SCM scm_address_string; + SCM scm_latency_list = SCM_EOL; + SCM scm_latency_address_pair = SCM_EOL; + + list_rewind(latency_list); + while((latency = list_next(latency_list)) != NULL) { + + scm_inum_latency = SCM_MAKINUM(*latency); + + address = list_next(latency_list); /* this should always return a value. */ + address_string = ip_addr_to_string(*address); + scm_address_string = scm_makfrom0str(address_string); + + scm_latency_address_pair = scm_cons(scm_address_string, scm_latency_address_pair); + scm_latency_address_pair = scm_cons(scm_inum_latency, scm_latency_address_pair); + + scm_latency_list = scm_cons(scm_latency_address_pair, scm_latency_list); + scm_latency_address_pair = SCM_EOL; + + xfree(address_string); + } + return scm_latency_list; + } + /* * * * * * * * * * * * * * * * * * * * * guile interface to utility routines * *************** *** 239,242 **** --- 309,314 ---- SCM_ARG2, "client-set-default-route"); + SCM_ASSERT(SCM_BOOLP(set_route), set_route, SCM_ARG3, "client-set-default-route"); + /* if string change to number first. */ if(SCM_STRINGP(scm_default_router)) { *************** *** 309,313 **** scm_dc, SCM_ARG1, "client-shutdown"); ! /* interface handle. */ client_control_smob = (client_control_smob_t *)SCM_SMOB_DATA(scm_dc); dc = client_control_smob->dc; --- 381,385 ---- scm_dc, SCM_ARG1, "client-shutdown"); ! /* client control. */ client_control_smob = (client_control_smob_t *)SCM_SMOB_DATA(scm_dc); dc = client_control_smob->dc; *************** *** 319,322 **** --- 391,444 ---- } + SCM scm_client_discover_icmp_latency(SCM scm_dc, SCM scm_address_list) + { + client_control_smob_t *client_control_smob; + dhcp_client_control_t *dc; + list_t *address_list; + list_t *latency_list; + SCM scm_latency_list; + int retries; + int timeout; + int arp_retries; + int arp_timeout; + + /* do assertions */ + SCM_ASSERT(SCM_SMOB_PREDICATE(client_control_tag, scm_dc), + scm_dc, SCM_ARG1, "client-discover-icmp-latency"); + + SCM_ASSERT(SCM_CONSP(scm_address_list), scm_address_list, SCM_ARG2, + "client-discover-icmp-latency"); + + /* client control. */ + client_control_smob = (client_control_smob_t *)SCM_SMOB_DATA(scm_dc); + dc = client_control_smob->dc; + + /* get number of retries. */ + retries = client_conf_get_icmp_retries(dc->conf, dhcp_client_get_server_ip_address(dc), + dhcp_client_get_server_hw_address(dc)); + + /* get timeout threshold. */ + timeout = client_conf_get_icmp_echo_timeout(dc->conf, dhcp_client_get_server_ip_address(dc), + dhcp_client_get_server_hw_address(dc)); + + /* get arp timeout. */ + arp_timeout = client_conf_get_arp_timeout(dc->conf, dhcp_client_get_server_ip_address(dc), + dhcp_client_get_server_hw_address(dc)); + + /* get arp retries. */ + arp_retries = client_conf_get_arp_retries(dc->conf, dhcp_client_get_server_ip_address(dc), + dhcp_client_get_server_hw_address(dc)); + + address_list = guile_address_list_to_internal_list(scm_address_list); + latency_list = icmp_rtt_discovery(dc->rawnet, timeout, retries, arp_retries, arp_timeout, address_list); + + scm_latency_list = internal_latency_list_to_guile_latency_list(latency_list); + + list_destroy(address_list, xfree); + list_destroy(latency_list, xfree); + + return scm_latency_list; + } + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * info message, error message, and fatal message wrappers. * *************** *** 656,659 **** --- 778,782 ---- scm_c_define_gsubr("client-fatal-error-message", 1, 0, 0, scm_client_fatal_error_message); scm_c_define_gsubr("client-shutdown", 1, 0, 0, scm_client_shutdown); + scm_c_define_gsubr("client-discover-icmp-latency", 2, 0, 0, scm_client_discover_icmp_latency); /* create hooks. */ |