Thread: [dhcp-agent-commits] dhcp-agent/src dhcp-lease-guile.c,1.1,1.2 dhcp-lease-guile.h,1.1,1.2
Status: Alpha
Brought to you by:
actmodern
From: <act...@us...> - 2003-08-17 00:58:00
|
Update of /cvsroot/dhcp-agent/dhcp-agent/src In directory sc8-pr-cvs1:/tmp/cvs-serv26708/src Modified Files: dhcp-lease-guile.c dhcp-lease-guile.h Log Message: added more lease smobs Index: dhcp-lease-guile.c =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/src/dhcp-lease-guile.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** dhcp-lease-guile.c 12 Aug 2003 12:05:47 -0000 1.1 --- dhcp-lease-guile.c 17 Aug 2003 00:57:57 -0000 1.2 *************** *** 21,25 **** * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * ! * lease smob */ --- 21,25 ---- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * ! * lease smobs */ *************** *** 33,37 **** #include "dhcp-lease-guile.h" ! static scm_t_bits lease_tag; /* mark a lease: we don't need to do any marking. */ --- 33,41 ---- #include "dhcp-lease-guile.h" ! static scm_t_bits lease_tag, lease_def_tag, lease_constraint_tag; ! ! /* * * * * * * * * * * ! * lease smob * ! * * * * * * * * * * */ /* mark a lease: we don't need to do any marking. */ *************** *** 416,418 **** --- 420,774 ---- lease_smob = (lease_smob_t *)SCM_SMOB_DATA(scm_lease); return lease_copy(lease_smob->lease); + } + + /* * * * * * * * * * * + * lease def smob * + * * * * * * * * * * */ + + /* mark a lease_def: we don't need to do any marking. */ + static SCM scm_lease_def_mark(SCM scm_lease_def) + { + return SCM_BOOL_F; + } + + /* free a lease scm. */ + static size_t scm_lease_def_free(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def; + + lease_def = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + lease_definition_destroy(lease_def->lease_def); + xfree(lease_def); + + return sizeof(lease_definition_smob_t); + } + + /* print out a lease def scm. */ + static int scm_lease_def_print(SCM scm_lease_def, SCM port, scm_print_state *pstate) + { + scm_puts("#<lease_def>", port); + return 1; + } + + /* create an SCM lease_def: this is called from the C code: a + copy is made so garbage collection doesn't clubber our copy */ + SCM scm_lease_def_c2scm(lease_definition_t *lease_def) + { + lease_definition_smob_t *lease_def_smob; + lease_definition_t *new_lease_def; + + new_lease_def = lease_definition_copy(lease_def); + lease_def_smob = scm_must_malloc(sizeof(lease_definition_smob_t), "lease-def-make"); + lease_def_smob->lease_def = new_lease_def; + + SCM_RETURN_NEWSMOB(lease_def_tag, lease_def_smob); + } + + /* create an SCM lease: this is called from the C code: no copy is made. */ + SCM scm_lease_def_c2scm_x(lease_definition_t *lease_def) + { + lease_definition_smob_t *lease_def_smob; + + lease_def_smob = scm_must_malloc(sizeof(lease_definition_smob_t), "lease-def-make"); + lease_def_smob->lease_def = lease_def; + + SCM_RETURN_NEWSMOB(lease_def_tag, lease_def_smob); + } + + /* get type of lease definition. */ + static SCM scm_lease_def_get_type(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-type"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + + switch(lease_definition_get_type(lease_def_smob->lease_def)) { + + case LEASE_SINGLE_ADDRESS: + return scm_str2symbol("lease-type-single-address"); + + case LEASE_RANGE_ADDRESS: + return scm_str2symbol("lease-type-range-address"); + + default: + return scm_str2symbol("lease-type-unknown"); + + } + } + + /* get constraint from lease definition. */ + static SCM scm_lease_def_get_constraint(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + lease_constraint_t *lease_constraint; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-constraint"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + lease_constraint = lease_definition_get_constraint(lease_def_smob->lease_def); + + return scm_lease_constraint_c2scm(lease_constraint); + } + + /* get bottom address from lease definition. */ + static SCM scm_lease_def_get_bottom_addr(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-bottom-addr"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return SCM_MAKINUM(lease_definition_get_bottom_addr(lease_def_smob->lease_def)); + } + + /* get top address from lease definition. */ + static SCM scm_lease_def_get_top_addr(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-top-addr"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return SCM_MAKINUM(lease_definition_get_top_addr(lease_def_smob->lease_def)); + } + + /* get subnet address on lease definition. */ + static SCM scm_lease_def_get_subnet_addr(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-subnet-addr"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return SCM_MAKINUM(lease_definition_get_subnet_addr(lease_def_smob->lease_def)); + } + + /* get subnet mask on lease definition. */ + static SCM scm_lease_def_get_subnet_mask(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-subnet-mask"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return SCM_MAKINUM(lease_definition_get_subnet_mask(lease_def_smob->lease_def)); + } + + /* get subnet address on lease definition. */ + static SCM scm_lease_def_get_options(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-subnet-mask"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return scm_dhcp_opt_c_list_to_list(lease_definition_get_options(lease_def_smob->lease_def)); + } + + /* get renew time on lease definition. */ + static SCM scm_lease_def_get_renew(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-renew"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return SCM_MAKINUM(lease_definition_get_renew(lease_def_smob->lease_def)); + } + + /* get rebind time on lease definition. */ + static SCM scm_lease_def_get_rebind(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-rebind"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + return SCM_MAKINUM(lease_definition_get_rebind(lease_def_smob->lease_def)); + } + + /* get expiry time on lease definition. */ + static SCM scm_lease_def_get_expiry(SCM scm_lease_def) + { + lease_definition_smob_t *lease_def_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_def_tag, scm_lease_def), + scm_lease_def, SCM_ARG1, "lease-def-get-expiry"); + + lease_def_smob = (lease_definition_smob_t *)SCM_SMOB_DATA(scm_lease_def); + + return SCM_MAKINUM(lease_definition_get_expiry(lease_def_smob->lease_def)); + } + + /* initialization routines for lease definition smob. */ + void init_lease_def_smob(void) + { + lease_def_tag = scm_make_smob_type("lease-def", sizeof(lease_definition_smob_t)); + + scm_set_smob_free(lease_def_tag, scm_lease_def_free); + scm_set_smob_mark(lease_def_tag, scm_lease_def_mark); + scm_set_smob_print(lease_def_tag, scm_lease_def_print); + + scm_c_define_gsubr("lease-def-get-type", 1, 0, 0, scm_lease_def_get_type); + scm_c_define_gsubr("lease-def-get-constraint", 1, 0, 0, scm_lease_def_get_constraint); + scm_c_define_gsubr("lease-def-get-bottom-addr", 1, 0, 0, scm_lease_def_get_bottom_addr); + scm_c_define_gsubr("lease-def-get-top-addr", 1, 0, 0, scm_lease_def_get_top_addr); + scm_c_define_gsubr("lease-def-get-subnet-addr", 1, 0, 0, scm_lease_def_get_subnet_addr); + scm_c_define_gsubr("lease-def-get-subnet-mask", 1, 0, 0, scm_lease_def_get_subnet_mask); + scm_c_define_gsubr("lease-def-get-options", 1, 0, 0, scm_lease_def_get_options); + scm_c_define_gsubr("lease-def-get-renew", 1, 0, 0, scm_lease_def_get_renew); + scm_c_define_gsubr("lease-def-get-rebind", 1, 0, 0, scm_lease_def_get_rebind); + scm_c_define_gsubr("lease-def-get-expiry", 1, 0, 0, scm_lease_def_get_expiry); + + return; + } + + /* * * * * * * * * * * * * * * + * lease definition smob * + * * * * * * * * * * * * * * */ + + /* mark a lease_constraint: we don't need to do any marking. */ + static SCM scm_lease_constraint_mark(SCM scm_lease_constraint) + { + return SCM_BOOL_F; + } + + /* free a lease constraint scm. */ + static size_t scm_lease_constraint_free(SCM scm_lease_constraint) + { + lease_constraint_smob_t *lease_constraint; + + lease_constraint = (lease_constraint_smob_t *)SCM_SMOB_DATA(scm_lease_constraint); + lease_constraint_destroy(lease_constraint->lease_constraint); + xfree(lease_constraint); + + return sizeof(lease_constraint_smob_t); + } + + /* print out a lease constraint scm. */ + static int scm_lease_constraint_print(SCM scm_lease_constraint, SCM port, scm_print_state *pstate) + { + scm_puts("#<lease_constraint>", port); + return 1; + } + + /* create an SCM lease_constraint: this is called from the C code: a + copy is made so garbage collection doesn't clubber our copy */ + SCM scm_lease_constraint_c2scm(lease_constraint_t *lease_constraint) + { + lease_constraint_smob_t *lease_constraint_smob; + lease_constraint_t *new_lease_constraint; + + new_lease_constraint = lease_constraint_copy(lease_constraint); + lease_constraint_smob = scm_must_malloc(sizeof(lease_constraint_smob_t), "lease-constraint-make"); + lease_constraint_smob->lease_constraint = new_lease_constraint; + + SCM_RETURN_NEWSMOB(lease_constraint_tag, lease_constraint_smob); + } + + /* create an SCM lease constraint: this is called from the C code: no copy is made. */ + SCM scm_lease_constraint_c2scm_x(lease_constraint_t *lease_constraint) + { + lease_constraint_smob_t *lease_constraint_smob; + + lease_constraint_smob = scm_must_malloc(sizeof(lease_constraint_smob_t), "lease-constraint-make"); + lease_constraint_smob->lease_constraint = lease_constraint; + + SCM_RETURN_NEWSMOB(lease_constraint_tag, lease_constraint_smob); + } + + /* get constraint type. */ + static SCM scm_lease_constraint_get_type(SCM scm_lease_constraint) + { + lease_constraint_smob_t *lease_constraint_smob; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_constraint_tag, scm_lease_constraint), + scm_lease_constraint, SCM_ARG1, "lease-constraint-get-type"); + + lease_constraint_smob = (lease_constraint_smob_t *)SCM_SMOB_DATA(scm_lease_constraint); + + switch(lease_constraint_get_type(lease_constraint_smob->lease_constraint)) { + + case LEASE_CONSTRAINT_NONE: + return scm_str2symbol("lease-constraint-none"); + + case LEASE_CONSTRAINT_HARDWARE_ADDRESS: + return scm_str2symbol("lease-constraint-hw-address"); + + case LEASE_CONSTRAINT_HOSTNAME: + return scm_str2symbol("lease-constraint-hostname"); + + default: + return scm_str2symbol("lease-constraint-type-unknown"); + } + } + + /* get constraint hostname. */ + static SCM scm_lease_constraint_get_hostname(SCM scm_lease_constraint) + { + lease_constraint_smob_t *lease_constraint_smob; + const char *hostname; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_constraint_tag, scm_lease_constraint), + scm_lease_constraint, SCM_ARG1, "lease-constraint-get-type"); + + lease_constraint_smob = (lease_constraint_smob_t *)SCM_SMOB_DATA(scm_lease_constraint); + hostname = lease_constraint_get_hostname(lease_constraint_smob->lease_constraint); + + if(hostname == NULL) + return SCM_BOOL_F; + else + return scm_makfrom0str(hostname); + } + + /* get constraint hw address. */ + static SCM scm_lease_constraint_get_hw_address(SCM scm_lease_constraint) + { + lease_constraint_smob_t *lease_constraint_smob; + eth_addr_t eth_addr; + char *eth_str; + SCM scm_eth_str; + + SCM_ASSERT(SCM_SMOB_PREDICATE(lease_constraint_tag, scm_lease_constraint), + scm_lease_constraint, SCM_ARG1, "lease-constraint-get-type"); + + lease_constraint_smob = (lease_constraint_smob_t *)SCM_SMOB_DATA(scm_lease_constraint); + + if(lease_constraint_get_type(lease_constraint_smob->lease_constraint) != LEASE_CONSTRAINT_HARDWARE_ADDRESS) { + return SCM_BOOL_F; + } + + eth_addr = lease_constraint_get_hw_address(lease_constraint_smob->lease_constraint); + eth_str = eth_addr_to_string(eth_addr); + scm_eth_str = scm_makfrom0str(eth_str); + xfree(eth_str); + + return scm_eth_str; + } + + /* init lease constraint smob. */ + void init_lease_constraint_smob(void) + { + lease_constraint_tag = scm_make_smob_type("lease-constraint", sizeof(lease_constraint_smob_t)); + + scm_set_smob_free(lease_constraint_tag, scm_lease_constraint_free); + scm_set_smob_mark(lease_constraint_tag, scm_lease_constraint_mark); + scm_set_smob_print(lease_constraint_tag, scm_lease_constraint_print); + + scm_c_define_gsubr("lease-constraint-get-type", 1, 0, 0, scm_lease_constraint_get_type); + scm_c_define_gsubr("lease-constraint-get-hostname", 1, 0, 0, scm_lease_constraint_get_hostname); + scm_c_define_gsubr("lease-constraint-get-hw-address", 1, 0, 0, scm_lease_constraint_get_hw_address); + + return; } Index: dhcp-lease-guile.h =================================================================== RCS file: /cvsroot/dhcp-agent/dhcp-agent/src/dhcp-lease-guile.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** dhcp-lease-guile.h 12 Aug 2003 12:05:47 -0000 1.1 --- dhcp-lease-guile.h 17 Aug 2003 00:57:57 -0000 1.2 *************** *** 32,35 **** --- 32,43 ---- } lease_smob_t; + typedef struct { + lease_definition_t *lease_def; + } lease_definition_smob_t; + + typedef struct { + lease_constraint_t *lease_constraint; + } lease_constraint_smob_t; + extern void init_lease_smob(void); extern lease_t *scm_c_get_lease(SCM scm_lease); *************** *** 37,40 **** extern SCM scm_lease_c2scm_x(lease_t *lease); ! #endif /* DHCP_LEASE_GUILE_H */ --- 45,55 ---- extern SCM scm_lease_c2scm_x(lease_t *lease); ! extern void init_lease_def_smob(void); ! extern SCM scm_lease_def_c2scm(lease_definition_t *lease_def); ! extern SCM scm_lease_def_c2scm_x(lease_definition_t *lease_def); ! ! extern void init_lease_constraint_smob(void); ! extern SCM scm_lease_constraint_c2scm(lease_constraint_t *lease_constraint); ! extern SCM scm_lease_constraint_c2scm_x(lease_constraint_t *lease_constraint); + #endif /* DHCP_LEASE_GUILE_H */ |