diff options
Diffstat (limited to 'utils/open-isns/isns.h')
-rw-r--r-- | utils/open-isns/isns.h | 670 |
1 files changed, 670 insertions, 0 deletions
diff --git a/utils/open-isns/isns.h b/utils/open-isns/isns.h new file mode 100644 index 0000000..73d4a45 --- /dev/null +++ b/utils/open-isns/isns.h @@ -0,0 +1,670 @@ +/* + * iSNS implementation - library header file. + * + * Copyright (C) 2007 Olaf Kirch <olaf.kirch@oracle.com> + * + * This file contains all declarations and definitions + * commonly required by users of libisns. + */ + +#ifndef ISNS_H +#define ISNS_H + +#include <sys/socket.h> +#include <netinet/in.h> +#include <stdio.h> + +#include <isns-proto.h> +#include "types.h" + +#define ISNS_MAX_BUFFER 8192 +#define ISNS_MAX_MESSAGE 8192 + + +/* + * Client handle + */ +typedef struct isns_client isns_client_t; +struct isns_client { + isns_source_t * ic_source; + isns_socket_t * ic_socket; +}; + +/* + * Server operations + */ +typedef int isns_service_fn_t(isns_server_t *, isns_simple_t *, isns_simple_t **); +typedef void isns_scn_callback_fn_t(isns_db_t *, uint32_t scn_bits, + isns_object_template_t *node_type, + const char *node_name, + const char *recipient); +struct isns_service_ops { + isns_service_fn_t * process_registration; + isns_service_fn_t * process_query; + isns_service_fn_t * process_getnext; + isns_service_fn_t * process_deregistration; + isns_service_fn_t * process_scn_registration; + isns_service_fn_t * process_scn_deregistration; + isns_service_fn_t * process_scn_event; + isns_service_fn_t * process_scn; + isns_service_fn_t * process_dd_registration; + isns_service_fn_t * process_dd_deregistration; + isns_service_fn_t * process_esi; + isns_service_fn_t * process_heartbeat; +}; + +extern struct isns_service_ops isns_default_service_ops; +extern struct isns_service_ops isns_callback_service_ops; + +/* + * Output function + */ +void isns_print_stdout(const char *, ...); + +/* + * Database events + */ +struct isns_db_event { + isns_object_t * ie_recipient; /* Recipient node or NULL */ + isns_object_t * ie_object; /* Affected object */ + isns_object_t * ie_trigger; /* Triggering object */ + unsigned int ie_bits; /* SCN bitmask */ +}; +typedef void isns_db_callback_t(const isns_db_event_t *, + void *user_data); + +/* + * Handling of client objects + */ +extern isns_client_t * isns_create_default_client(isns_security_t *); +extern isns_client_t * isns_create_client(isns_security_t *, + const char *source_name); +extern isns_client_t * isns_create_local_client(isns_security_t *, + const char *source_name); +extern int isns_client_call(isns_client_t *, + isns_simple_t **inout); +extern void isns_client_destroy(isns_client_t *); +extern int isns_client_get_local_address(const isns_client_t *, + isns_portal_info_t *); + +/* + * Handling of server objects + */ +extern isns_server_t * isns_create_server(isns_source_t *, + isns_db_t *, + struct isns_service_ops *); +extern void isns_server_set_scn_callback(isns_server_t *, + isns_scn_callback_fn_t *); + + +/* + * Handling of source names + */ +extern int isns_init_names(void); +extern const char * isns_default_source_name(void); +extern isns_source_t * isns_source_create(isns_attr_t *); +extern isns_source_t * isns_source_create_iscsi(const char *name); +extern isns_source_t * isns_source_create_ifcp(const char *name); +extern uint32_t isns_source_type(const isns_source_t *); +extern const char * isns_source_name(const isns_source_t *); +extern isns_attr_t * isns_source_attr(const isns_source_t *); +extern isns_source_t * isns_source_get(isns_source_t *); +extern isns_source_t * isns_source_from_object(const isns_object_t *); +extern void isns_source_release(isns_source_t *); +extern int isns_source_match(const isns_source_t *, + const isns_source_t *); + +extern void isns_server_set_source(isns_source_t *); +extern isns_message_t * isns_process_message(isns_server_t *, isns_message_t *); + +extern void isns_simple_print(isns_simple_t *, + isns_print_fn_t *); +extern int isns_simple_call(isns_socket_t *, + isns_simple_t **); +extern int isns_simple_transmit(isns_socket_t *, + isns_simple_t *, + const isns_portal_info_t *, + unsigned int, + void (*callback)(uint32_t, isns_simple_t *)); +extern void isns_simple_free(isns_simple_t *); +extern const isns_attr_list_t *isns_simple_get_attrs(isns_simple_t *); + +extern isns_simple_t * isns_create_query(isns_client_t *clnt, + const isns_attr_list_t *query_key); +extern isns_simple_t * isns_create_query2(isns_client_t *clnt, + const isns_attr_list_t *query_key, + isns_source_t *source); +extern int isns_query_request_attr_tag(isns_simple_t *, + uint32_t); +extern int isns_query_request_attr(isns_simple_t *, + isns_attr_t *); +extern int isns_query_response_get_objects(isns_simple_t *qry, + isns_object_list_t *result); + +extern isns_simple_t * isns_create_registration(isns_client_t *clnt, + isns_object_t *key_object); +extern isns_simple_t * isns_create_registration2(isns_client_t *clnt, + isns_object_t *key_object, + isns_source_t *source); +extern void isns_registration_set_replace(isns_simple_t *, int); +extern void isns_registration_add_object(isns_simple_t *, + isns_object_t *object); +extern void isns_registration_add_object_list(isns_simple_t *, + isns_object_list_t *); +extern int isns_registration_response_get_objects(isns_simple_t *, + isns_object_list_t *); + +extern isns_simple_t * isns_create_getnext(isns_client_t *, + isns_object_template_t *, + const isns_attr_list_t *); +extern int isns_getnext_response_get_object(isns_simple_t *, + isns_object_t **); +extern isns_simple_t * isns_create_getnext_followup(isns_client_t *, + const isns_simple_t *, + const isns_attr_list_t *); + +extern isns_simple_t * isns_create_deregistration(isns_client_t *clnt, + const isns_attr_list_t *); + +extern isns_simple_t * isns_create_scn_registration(isns_client_t *clnt, + unsigned int); +extern isns_simple_t * isns_create_scn_registration2(isns_client_t *clnt, + unsigned int, + isns_source_t *); + +extern int isns_dd_load_all(isns_db_t *); +extern void isns_dd_get_members(uint32_t, isns_object_list_t *, int); +extern isns_simple_t * isns_create_dd_registration(isns_client_t *, + const isns_attr_list_t *); +extern isns_simple_t * isns_create_dd_deregistration(isns_client_t *, + uint32_t, const isns_attr_list_t *); + +extern isns_object_t * isns_create_object(isns_object_template_t *, + const isns_attr_list_t *, + isns_object_t *); +extern isns_object_t * isns_create_entity(int, const char *); +extern isns_object_t * isns_create_entity_for_source(const isns_source_t *, + const char *); +extern const char * isns_entity_name(const isns_object_t *); +extern isns_object_t * isns_create_portal(const isns_portal_info_t *, + isns_object_t *parent); +extern isns_object_t * isns_create_storage_node(const char *name, + uint32_t type_mask, + isns_object_t *parent); +extern isns_object_t * isns_create_storage_node2(const isns_source_t *, + uint32_t type_mask, + isns_object_t *parent); +extern isns_object_t * isns_create_iscsi_initiator(const char *name, + isns_object_t *parent); +extern isns_object_t * isns_create_iscsi_target(const char *name, + isns_object_t *parent); +extern const char * isns_storage_node_name(const isns_object_t *); +extern isns_attr_t * isns_storage_node_key_attr(const isns_object_t *); +extern isns_object_t * isns_create_portal_group(isns_object_t *portal, + isns_object_t *iscsi_node, uint32_t pg_tag); +extern isns_object_t * isns_create_default_portal_group(isns_db_t *, + isns_object_t *portal, + isns_object_t *node); +extern void isns_get_portal_groups(isns_object_t *portal, + isns_object_t *node, + isns_object_list_t *result); + +extern const char * isns_object_template_name(isns_object_template_t *); +extern int isns_object_set_attr(isns_object_t *, isns_attr_t *); +extern int isns_object_set_attrlist(isns_object_t *, const isns_attr_list_t *); +extern isns_object_t * isns_object_get(isns_object_t *); +extern int isns_object_get_attrlist(isns_object_t *obj, + isns_attr_list_t *result, + const isns_attr_list_t *requested_attrs); +extern int isns_object_get_key_attrs(isns_object_t *, + isns_attr_list_t *); +extern int isns_object_get_attr(const isns_object_t *, uint32_t, + isns_attr_t **); +extern void isns_object_get_related(isns_db_t *, + isns_object_t *, isns_object_list_t *); +extern void isns_object_get_descendants(const isns_object_t *, + isns_object_template_t *, + isns_object_list_t *); +extern void isns_object_release(isns_object_t *); +extern int isns_object_match(const isns_object_t *, + const isns_attr_list_t *); +extern isns_object_t * isns_object_get_entity(isns_object_t *); +extern int isns_object_attr_valid(isns_object_template_t *, uint32_t); +extern int isns_object_contains(const isns_object_t *, const isns_object_t *); +extern int isns_object_delete_attr(isns_object_t *, uint32_t); +extern int isns_object_is(const isns_object_t *, + isns_object_template_t *); +extern int isns_object_is_entity(const isns_object_t *); +extern int isns_object_is_iscsi_node(const isns_object_t *); +extern int isns_object_is_fc_port(const isns_object_t *); +extern int isns_object_is_fc_node(const isns_object_t *); +extern int isns_object_is_portal(const isns_object_t *); +extern int isns_object_is_pg(const isns_object_t *); +extern int isns_object_is_policy(const isns_object_t *); +extern int isns_object_is_dd(const isns_object_t *); +extern int isns_object_is_ddset(const isns_object_t *); +extern void isns_object_print(isns_object_t *, + isns_print_fn_t *); +extern time_t isns_object_last_modified(const isns_object_t *); +extern int isns_object_mark_membership(isns_object_t *, uint32_t); +extern int isns_object_clear_membership(isns_object_t *, uint32_t); +extern int isns_object_test_membership(const isns_object_t *, uint32_t); +extern int isns_object_test_visibility(const isns_object_t *, + const isns_object_t *); +extern void isns_object_get_visible(const isns_object_t *, + isns_db_t *, isns_object_list_t *); +extern void isns_entity_touch(isns_object_t *); +extern int isns_object_extract_keys(const isns_object_t *, + isns_attr_list_t *); +extern int isns_object_extract_all(const isns_object_t *, + isns_attr_list_t *); +extern int isns_object_extract_writable(const isns_object_t *, + isns_attr_list_t *); + + +extern int isns_object_set_nil(isns_object_t *obj, + uint32_t tag); +extern int isns_object_set_string(isns_object_t *obj, + uint32_t tag, + const char *value); +extern int isns_object_set_uint32(isns_object_t *obj, + uint32_t tag, + uint32_t value); +extern int isns_object_set_uint64(isns_object_t *obj, + uint32_t tag, + uint64_t value); +extern int isns_object_set_ipaddr(isns_object_t *obj, + uint32_t tag, + const struct in6_addr *value); + +extern int isns_object_get_string(const isns_object_t *, + uint32_t, + const char **); +extern int isns_object_get_ipaddr(const isns_object_t *, + uint32_t, + struct in6_addr *); +extern int isns_object_get_uint32(const isns_object_t *, + uint32_t, + uint32_t *); +extern int isns_object_get_uint64(const isns_object_t *, + uint32_t, + uint64_t *); +extern int isns_object_get_opaque(const isns_object_t *, + uint32_t, + const void **, size_t *); + + +extern int isns_object_find_descendants(isns_object_t *obj, + isns_object_template_t *, + const isns_attr_list_t *keys, + isns_object_list_t *result); +extern isns_object_t * isns_object_find_descendant(isns_object_t *obj, + const isns_attr_list_t *keys); +extern int isns_object_detach(isns_object_t *); +extern int isns_object_attach(isns_object_t *, isns_object_t *); +extern void isns_object_prune_attrs(isns_object_t *); +extern void isns_mark_object(isns_object_t *, unsigned int); + +extern int isns_get_entity_identifier(isns_object_t *, const char **); +extern int isns_get_entity_protocol(isns_object_t *, isns_entity_protocol_t *); +extern int isns_get_entity_index(isns_object_t *, uint32_t *); + +extern int isns_get_portal_ipaddr(isns_object_t *, struct in6_addr *); +extern int isns_get_portal_tcpudp_port(isns_object_t *, + int *ipprotocol, uint16_t *port); +extern int isns_get_portal_index(isns_object_t *, uint32_t *); + +extern int isns_get_address(struct sockaddr_storage *, + const char *, const char *, int, int, int); +extern char * isns_get_canon_name(const char *); + +extern isns_db_t * isns_db_open(const char *location); +extern isns_db_t * isns_db_open_shadow(isns_object_list_t *); +extern isns_object_t * isns_db_lookup(isns_db_t *, + isns_object_template_t *, + const isns_attr_list_t *); +extern isns_object_t * isns_db_vlookup(isns_db_t *, + isns_object_template_t *, + ...); +extern int isns_db_gang_lookup(isns_db_t *, + isns_object_template_t *, + const isns_attr_list_t *, + isns_object_list_t *); +extern isns_object_t * isns_db_get_next(isns_db_t *, + isns_object_template_t *, + const isns_attr_list_t *current, + const isns_attr_list_t *scope, + const isns_source_t *source); +extern isns_object_t * isns_db_lookup_source_node(isns_db_t *, + const isns_source_t *); +extern void isns_db_get_domainless(isns_db_t *, + isns_object_template_t *, + isns_object_list_t *); +extern uint32_t isns_db_allocate_index(isns_db_t *); +extern void isns_db_insert(isns_db_t *, isns_object_t *); +extern void isns_db_insert_limbo(isns_db_t *, isns_object_t *); +extern int isns_db_remove(isns_db_t *, isns_object_t *); +extern time_t isns_db_expire(isns_db_t *); +extern void isns_db_purge(isns_db_t *); +extern void isns_db_sync(isns_db_t *); +extern const char * isns_db_generate_eid(isns_db_t *, char *, size_t); +extern isns_object_t * isns_db_get_control(isns_db_t *); +extern void isns_db_print(isns_db_t *, + isns_print_fn_t *); + +extern void isns_db_begin_transaction(isns_db_t *); +extern void isns_db_commit(isns_db_t *); +extern void isns_db_rollback(isns_db_t *); + +extern void isns_object_event(isns_object_t *obj, + unsigned int bits, + isns_object_t *trigger); +extern void isns_unicast_event(isns_object_t *dst, + isns_object_t *obj, + unsigned int bits, + isns_object_t *trigger); +extern void isns_register_callback(isns_db_callback_t *, + void *); +extern void isns_flush_events(void); +extern const char * isns_event_string(unsigned int); + +extern void isns_add_timer(unsigned int, + isns_timer_callback_t *, void *); +extern void isns_add_oneshot_timer(unsigned int, + isns_timer_callback_t *, void *); +extern void isns_cancel_timer(isns_timer_callback_t *, void *); +extern time_t isns_run_timers(void); + +extern void isns_object_list_init(isns_object_list_t *); +extern void isns_object_list_destroy(isns_object_list_t *); +extern int isns_object_list_contains(const isns_object_list_t *, + isns_object_t *); +extern void isns_object_list_append(isns_object_list_t *, + isns_object_t *); +extern void isns_object_list_append_list(isns_object_list_t *, + const isns_object_list_t *); +extern isns_object_t * isns_object_list_lookup(const isns_object_list_t *, + isns_object_template_t *, + const isns_attr_list_t *); +extern int isns_object_list_gang_lookup(const isns_object_list_t *, + isns_object_template_t *, + const isns_attr_list_t *, + isns_object_list_t *); +extern int isns_object_list_remove(isns_object_list_t *, + isns_object_t *); +extern void isns_object_list_uniq(isns_object_list_t *); +extern void isns_object_list_print(const isns_object_list_t *, + isns_print_fn_t *); + +isns_object_template_t *isns_object_template_for_key_attrs(const isns_attr_list_t *); +isns_object_template_t *isns_object_template_for_tag(uint32_t); +isns_object_template_t *isns_object_template_for_index_tag(uint32_t); +isns_object_template_t *isns_object_template_find(uint32_t); + +extern int isns_attr_set(isns_attr_t *, const void *); +extern isns_attr_t * isns_attr_get(isns_attr_t *); +extern void isns_attr_release(isns_attr_t *); +extern void isns_attr_print(const isns_attr_t *, + isns_print_fn_t *); +extern char * isns_attr_print_value(const isns_attr_t *, + char *, size_t); +extern int isns_attr_match(const isns_attr_t *, + const isns_attr_t *); +extern int isns_attr_compare(const isns_attr_t *, + const isns_attr_t *); +extern isns_attr_t * isns_attr_from_string(uint32_t, const char *); + +extern void isns_attr_list_print(const isns_attr_list_t *, + isns_print_fn_t *); + +extern void isns_attr_list_init(isns_attr_list_t *); +extern void isns_attr_list_copy(isns_attr_list_t *, + const isns_attr_list_t *); +extern void isns_attr_list_destroy(isns_attr_list_t *); +extern int isns_attr_list_remove_tag(isns_attr_list_t *, + uint32_t); + +extern void isns_attr_list_append_attr(isns_attr_list_t *, + isns_attr_t *); +extern void isns_attr_list_append_list(isns_attr_list_t *, + const isns_attr_list_t *); +extern int isns_attr_list_replace_attr(isns_attr_list_t *, + isns_attr_t *); +/* Warning: this does *NOT* return a reference to the attribute */ +extern int isns_attr_list_get_attr(const isns_attr_list_t *, + uint32_t tag, + isns_attr_t **); + +extern void isns_attr_list_append_nil(isns_attr_list_t *, + uint32_t tag); +extern void isns_attr_list_append_string(isns_attr_list_t *, + uint32_t tag, const char *value); +extern void isns_attr_list_append_uint32(isns_attr_list_t *, + uint32_t tag, uint32_t value); +extern void isns_attr_list_append_uint64(isns_attr_list_t *, + uint32_t, int64_t); +extern void isns_attr_list_append_int32(isns_attr_list_t *, + uint32_t tag, int32_t value); +extern void isns_attr_list_append_opaque(isns_attr_list_t *, + uint32_t tag, const void *ptr, size_t len); +extern void isns_attr_list_append_ipaddr(isns_attr_list_t *, + uint32_t tag, const struct in6_addr *); + +extern int isns_attr_list_append(isns_attr_list_t *, + uint32_t tag, const void *); +extern int isns_attr_list_update(isns_attr_list_t *, + uint32_t tag, const void *); + +extern int isns_attr_list_contains(const isns_attr_list_t *, + uint32_t tag); +extern int isns_attr_list_compare(const isns_attr_list_t *, + const isns_attr_list_t *); + +/* + * Helper macros + */ +#define ISNS_ATTR_TYPE_CHECK(attr, type) \ + ((attr)->ia_value.iv_type == &isns_attr_type_##type) +#define ISNS_ATTR_IS_NIL(attr) \ + ISNS_ATTR_TYPE_CHECK(attr, nil) +#define ISNS_ATTR_IS_STRING(attr) \ + ISNS_ATTR_TYPE_CHECK(attr, string) +#define ISNS_ATTR_IS_IPADDR(attr) \ + ISNS_ATTR_TYPE_CHECK(attr, ipaddr) +#define ISNS_ATTR_IS_UINT32(attr) \ + ISNS_ATTR_TYPE_CHECK(attr, uint32) +#define ISNS_ATTR_IS_UINT64(attr) \ + ISNS_ATTR_TYPE_CHECK(attr, uint64) +#define ISNS_ATTR_IS_OPAQUE(attr) \ + ISNS_ATTR_TYPE_CHECK(attr, opaque) + + + +extern isns_socket_t * isns_create_server_socket(const char *hostname, const char *portname, + int af_hint, int sock_type); +extern isns_socket_t * isns_create_client_socket(const char *hostname, const char *portname, + int af_hint, int sock_type); +extern isns_socket_t * isns_create_bound_client_socket(const char *myaddr, + const char *hostname, const char *portname, + int af_hint, int sock_type); +extern isns_socket_t * isns_connect_to_portal(const isns_portal_info_t *); +extern void isns_socket_set_disconnect_fatal(isns_socket_t *); +extern int isns_socket_get_local_addr(const isns_socket_t *, + struct sockaddr_storage *); +extern int isns_socket_get_portal_info(const isns_socket_t *, + isns_portal_info_t *); +extern void isns_socket_set_security_ctx(isns_socket_t *, + isns_security_t *); +extern isns_message_t * isns_recv_message(struct timeval *timeout); +extern isns_message_t * isns_socket_call(isns_socket_t *, isns_message_t *, long); +extern int isns_socket_send(isns_socket_t *, isns_message_t *); +extern void isns_socket_free(isns_socket_t *); +extern int isns_addr_get_port(const struct sockaddr *); +extern void isns_addr_set_port(struct sockaddr *, unsigned int); +extern isns_socket_t * isns_socket_find_server(const isns_portal_info_t *); + +extern isns_message_t * isns_create_message(uint16_t function, uint16_t flags); +extern isns_message_t * isns_create_reply(const isns_message_t *); +extern int isns_message_init(isns_message_t *, + uint16_t, uint16_t, size_t); +extern int isns_message_status(isns_message_t *); +extern void isns_message_release(isns_message_t *); +extern unsigned int isns_message_function(const isns_message_t *); +extern isns_socket_t * isns_message_socket(const isns_message_t *); +extern void isns_message_set_error(isns_message_t *, uint32_t); + +extern const char * isns_strerror(enum isns_status); +extern const char * isns_function_name(unsigned int); + +/* + * Security related functions + */ +extern int isns_security_init(void); +extern isns_principal_t *isns_security_load_privkey(isns_security_t *, + const char *filename); +extern isns_principal_t *isns_security_load_pubkey(isns_security_t *, + const char *filename); +extern isns_security_t *isns_default_security_context(int server_only); +extern isns_security_t *isns_control_security_context(int server_only); +extern isns_security_t *isns_create_dsa_context(void); +extern void isns_security_set_identity(isns_security_t *, isns_principal_t *); +extern void isns_principal_free(isns_principal_t *); +extern void isns_add_principal(isns_security_t *, isns_principal_t *); +extern isns_keystore_t *isns_create_keystore(const char *); +extern void isns_security_set_keystore(isns_security_t *, + isns_keystore_t *); +extern void isns_principal_set_name(isns_principal_t *, const char *); +extern const char * isns_principal_name(const isns_principal_t *); + +extern isns_object_template_t isns_entity_template; +extern isns_object_template_t isns_portal_template; +extern isns_object_template_t isns_iscsi_node_template; +extern isns_object_template_t isns_fc_port_template; +extern isns_object_template_t isns_fc_node_template; +extern isns_object_template_t isns_iscsi_pg_template; +extern isns_object_template_t isns_dd_template; +extern isns_object_template_t isns_ddset_template; + +/* + * Config file parser + */ +struct isns_config { + char * ic_host_name; + char * ic_auth_name; + char * ic_source_name; + char * ic_source_suffix; + char * ic_entity_name; + + char * ic_server_name; + char * ic_bind_address; + char * ic_database; + char * ic_auth_key_file; + char * ic_server_key_file; + char * ic_client_keystore; + char * ic_control_socket; + char * ic_pidfile; + char * ic_local_registry_file; + int ic_security; + int ic_slp_register; + + char * ic_control_name; + char * ic_control_key_file; + + unsigned int ic_registration_period; + unsigned int ic_scn_timeout; + unsigned int ic_scn_retries; + char * ic_scn_callout; + + unsigned int ic_esi_max_interval; + unsigned int ic_esi_min_interval; + unsigned int ic_esi_retries; + + unsigned int ic_use_default_domain; + + struct { + unsigned int policy; + unsigned int replay_window; + unsigned int timestamp_jitter; + int allow_unknown_peers; + } ic_auth; + struct { + unsigned int max_sockets; + unsigned int connect_timeout; + unsigned int reconnect_timeout; + unsigned int call_timeout; + unsigned int udp_retrans_timeout; + unsigned int tcp_retrans_timeout; + unsigned int idle_timeout; + } ic_network; + struct { + char * param_file; + unsigned int key_bits; + } ic_dsa; + +}; + +extern struct isns_config isns_config; +extern int isns_read_config(const char *); +extern int isns_config_set(const char *, char *); + +/* + * Reserved entity name for Policy information + */ +#define ISNS_ENTITY_CONTROL "CONTROL" + + +/* + * Helpers to deal with portal information + */ +struct isns_portal_info { + struct sockaddr_in6 addr; + int proto; +}; + +extern void isns_portal_init(isns_portal_info_t *, + const struct sockaddr *, int); +extern int isns_portal_parse(isns_portal_info_t *portal, + const char *addr_spec, + const char *default_port); +extern int isns_portal_from_attr_list(isns_portal_info_t *, + uint32_t addr_tag, uint32_t port_tag, + const isns_attr_list_t *); +extern int isns_portal_from_attr_pair(isns_portal_info_t *, + const isns_attr_t *, + const isns_attr_t *); +extern int isns_portal_from_object(isns_portal_info_t *, + uint32_t addr_tag, uint32_t port_tag, + const isns_object_t *); +extern int isns_portal_from_sockaddr(isns_portal_info_t *, + const struct sockaddr_storage *); +extern int isns_portal_to_sockaddr(const isns_portal_info_t *, + struct sockaddr_storage *); +extern int isns_portal_to_attr_list(const isns_portal_info_t *, + uint32_t addr_tag, uint32_t port_tag, + isns_attr_list_t *); +extern int isns_portal_to_object(const isns_portal_info_t *, + uint32_t addr_tag, uint32_t port_tag, + isns_object_t *); +extern int isns_portal_is_wildcard(const isns_portal_info_t *); +extern uint32_t isns_portal_tcpudp_port(const isns_portal_info_t *); +extern const char * isns_portal_string(const isns_portal_info_t *); +extern int isns_portal_equal(const isns_portal_info_t *, + const isns_portal_info_t *); +extern int isns_enumerate_portals(isns_portal_info_t *, + unsigned int); + +/* Local registry stuff */ +extern int isns_local_registry_load(const char *, pid_t, isns_object_list_t *); +extern int isns_local_registry_store(const char *, pid_t, const isns_object_list_t *); +extern int isns_local_registry_purge(const char *, pid_t); + +/* Should go somwhere else .*/ +extern int isns_esi_enabled; + +extern void isns_esi_init(isns_server_t *); +extern void isns_esi_register(isns_object_t *); + +extern void isns_scn_init(isns_server_t *); +extern time_t isns_scn_transmit_all(void); + +#endif /* ISNS_H */ |