mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-08-05 09:40:38 +00:00
remove all trailing blanks
git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2117 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
parent
5ac04efe9b
commit
904a10ed38
60
Doxyfile
60
Doxyfile
@ -16,7 +16,7 @@ BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_PATH =
|
||||
INTERNAL_DOCS = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
CASE_SENSE_NAMES = YES
|
||||
@ -33,8 +33,8 @@ TAB_SIZE = 8
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
ALIASES =
|
||||
ENABLED_SECTIONS =
|
||||
ALIASES =
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
SHOW_USED_FILES = YES
|
||||
@ -44,19 +44,19 @@ SHOW_USED_FILES = YES
|
||||
QUIET = YES
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
WARN_FORMAT =
|
||||
WARN_LOGFILE =
|
||||
WARN_FORMAT =
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = lib include exec
|
||||
FILE_PATTERNS = *.c *.h
|
||||
RECURSIVE = YES
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
@ -70,15 +70,15 @@ REFERENCES_RELATION = YES
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT =
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_OUTPUT =
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
GENERATE_CHI = NO
|
||||
@ -92,11 +92,11 @@ TREEVIEW_WIDTH = 250
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT =
|
||||
LATEX_OUTPUT =
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
@ -104,11 +104,11 @@ LATEX_BATCHMODE = NO
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT =
|
||||
RTF_OUTPUT =
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
@ -121,7 +121,7 @@ MAN_LINKS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
@ -131,17 +131,17 @@ INCLUDE_PATH = include
|
||||
INCLUDE_FILE_PATTERNS = *.h
|
||||
PREDEFINED = "COROSYNC_BEGIN_DECLS=" \
|
||||
"COROSYNC_END_DECLS=" \
|
||||
"DOXYGEN_SHOULD_SKIP_THIS"
|
||||
"DOXYGEN_SHOULD_SKIP_THIS"
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to external references
|
||||
# Configuration::addtions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
PERL_PATH =
|
||||
PERL_PATH =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HAVE_DOT = NO
|
||||
@ -152,13 +152,13 @@ HIDE_UNDOC_RELATIONS = YES
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 640
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to the search engine
|
||||
# Configuration::addtions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
||||
|
2
LICENSE
2
LICENSE
@ -7,7 +7,7 @@ available source code, may be exported from the United States under License
|
||||
Exception TSU prsuant to 15 C.F.R Section 740.13(e).
|
||||
***
|
||||
-----------------------------------------------------------------------------
|
||||
The following license applies to every file in this package except for
|
||||
The following license applies to every file in this package except for
|
||||
the files exec/crypto.c and exec/crypto.h. The license for these files is
|
||||
described later in this document. Some files are contributed by other authors
|
||||
and hence not copyright MontaVista Software. In this case, the license is
|
||||
|
@ -1,13 +1,13 @@
|
||||
# Copyright (c) 2009 Red Hat, Inc.
|
||||
#
|
||||
#
|
||||
# Authors: Andrew Beekhof
|
||||
# Steven Dake (sdake@redhat.com)
|
||||
#
|
||||
# This software licensed under BSD license, the text of which follows:
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
|
@ -405,7 +405,7 @@ are provided:
|
||||
* get a reference to a handle instance
|
||||
* release a reference to a handle instance
|
||||
|
||||
When a library connects, it sends via a message, the service type. The
|
||||
When a library connects, it sends via a message, the service type. The
|
||||
service type is stored and used later to reference the message handlers
|
||||
for both the library message handlers and executive message handlers.
|
||||
Every message sent contains an integer identifier, which is used to index
|
||||
@ -427,7 +427,7 @@ virtual synchrony model. The group messaging interface also delivers the
|
||||
message according to the extended virtual synchrony model. This has several
|
||||
advantages which are described in the virtual synchrony section. One
|
||||
advantage that must be described now is that messages are self-delivered;
|
||||
if a node sends a message, that same message is delivered back to that
|
||||
if a node sends a message, that same message is delivered back to that
|
||||
node.
|
||||
|
||||
When the executive message is delivered, it is processed by the executive
|
||||
@ -509,7 +509,7 @@ Certain guarantees are required by virtual synchrony. If a message is sent,
|
||||
it must be delivered by every processor unless that processor fails. If a
|
||||
particular processor fails, a configuration change occurs creating a new
|
||||
configuration under which a new set of decisions may be made. This implies
|
||||
that even unreliable networks must reliably deliver messages. The
|
||||
that even unreliable networks must reliably deliver messages. The
|
||||
mplementation in corosync works on unreliable as well as reliable networks.
|
||||
|
||||
Every message sent must be delivered, unless a configuration change occurs.
|
||||
@ -788,7 +788,7 @@ enum service_types {
|
||||
|
||||
These are the request CLM message identifiers:
|
||||
|
||||
Each library should have an ipc_APINAME.h file in include. It should define
|
||||
Each library should have an ipc_APINAME.h file in include. It should define
|
||||
request types and response types.
|
||||
|
||||
enum req_clm_types {
|
||||
@ -845,7 +845,7 @@ struct req_clm_trackstart {
|
||||
SaUint32T numberOfItems;
|
||||
};
|
||||
|
||||
The saClmClusterTrackStart api should create this message and send it to the
|
||||
The saClmClusterTrackStart api should create this message and send it to the
|
||||
executive.
|
||||
|
||||
responses should be of:
|
||||
@ -855,12 +855,12 @@ struct res_clm_trackstart
|
||||
------------
|
||||
some notes
|
||||
------------
|
||||
* Avoid doing anything tricky in the library itself. Let the executive
|
||||
* Avoid doing anything tricky in the library itself. Let the executive
|
||||
handler do all of the work of the system. minimize what the API does.
|
||||
* Once an api is developed, it must be added to the makefile. Just add
|
||||
a line for the file to EXECOBJS build line.
|
||||
* protect I/O send/recv with a mutex.
|
||||
* always look at other libraries when there is a question about how to
|
||||
* always look at other libraries when there is a question about how to
|
||||
do something. It has likely been thought out in another library.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
@ -998,7 +998,7 @@ used in the handler function.
|
||||
------------------------------------------------
|
||||
|
||||
The service handler needs some special magic to dynamically be linked into
|
||||
corosync.
|
||||
corosync.
|
||||
|
||||
/*
|
||||
* Dynamic loader definition
|
||||
@ -1047,7 +1047,7 @@ creating an external plugin, there are configuration parameters which may
|
||||
be used to add your plugin into the corosync scanning of plugins.
|
||||
|
||||
---------------------------------
|
||||
Connection specific information
|
||||
Connection specific information
|
||||
---------------------------------
|
||||
Every connection may have specific connection information if private data
|
||||
is greater then zero for the service handler. This is used to allow each
|
||||
@ -1194,7 +1194,7 @@ so expect it in the code.
|
||||
----------------
|
||||
the confchg_fn
|
||||
----------------
|
||||
This function is called whenever a configuration change occurs. Some
|
||||
This function is called whenever a configuration change occurs. Some
|
||||
services may not need this function, while others may. This is a good way
|
||||
to sync up joining nodes with the current state of the information stored
|
||||
on a particular processor.
|
||||
@ -1206,7 +1206,7 @@ GDB is your friend, especially the "where" command. But it stops execution.
|
||||
This has a nasty side effect of killing the current configuration. In this
|
||||
case GDB may become your enemy.
|
||||
|
||||
printf is your friend when GDB is your enemy.
|
||||
printf is your friend when GDB is your enemy.
|
||||
|
||||
If stuck, ask on the mailing list, send your patches. Alot of time has been
|
||||
spent designing corosync, and even more time debugging it. There are people
|
||||
|
@ -91,7 +91,7 @@ pseudocode executed on event receipt of checkpoint update
|
||||
else
|
||||
create checkpoint
|
||||
reset checkpoint refcount array
|
||||
|
||||
|
||||
pseudocode executed on event receipt of checkpoint section update
|
||||
if checkpoint section exists in temporary storage
|
||||
ignore message
|
||||
|
8
SECURITY
8
SECURITY
@ -45,7 +45,7 @@ Group Messaging Interface
|
||||
Group messaging uses UDP/IP to communicate with other corosync executives using
|
||||
messages. It is possible without authentication of every packet that an
|
||||
attacker could forge messages. These forged messages could fault the corosync
|
||||
executive distributed state machines. It would also be possible to corrupt
|
||||
executive distributed state machines. It would also be possible to corrupt
|
||||
end applications by forging changes.
|
||||
|
||||
Since messages are sent using UDP/IP it would be possible to snoop those
|
||||
@ -62,7 +62,7 @@ wants to receive a message from the network, it uses
|
||||
authenticate_and_decrypt to verify the message is valid and decrypt it.
|
||||
|
||||
These two functions utilize the following algorithms:
|
||||
sha1 - hash algorithm secure for using with hmac
|
||||
sha1 - hash algorithm secure for using with hmac
|
||||
hmac - produces a 16 byte digest from any length input
|
||||
sober - pseudo random number generator and stream cipher
|
||||
|
||||
@ -76,7 +76,7 @@ sober algorithm to generate the three required keys.
|
||||
Every message starts with a
|
||||
struct security {
|
||||
unsigned char digest[20]; A one way hash digest
|
||||
unsigned char salt[16]; A securely generated random number
|
||||
unsigned char salt[16]; A securely generated random number
|
||||
}
|
||||
|
||||
When a message is sent (encrypt_and_sign):
|
||||
@ -96,7 +96,7 @@ When a message is sent (encrypt_and_sign):
|
||||
7. The message, except for the security header, is hmaced to produce a digest
|
||||
using the sha1 algorithm.
|
||||
8. The digest is stored in the outgoing message.
|
||||
9. The message is transmitted.
|
||||
9. The message is transmitted.
|
||||
|
||||
|
||||
When a message is received (decrypt_and_authenticate):
|
||||
|
18
autogen.sh
18
autogen.sh
@ -25,17 +25,17 @@ testProgram()
|
||||
fi
|
||||
|
||||
# The GNU standard is --version
|
||||
if
|
||||
if
|
||||
$cmd --version </dev/null >/dev/null 2>&1
|
||||
then
|
||||
return 0
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Maybe it suppports -V instead
|
||||
if
|
||||
if
|
||||
$cmd -V </dev/null >/dev/null 2>&1
|
||||
then
|
||||
return 0
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Nope, the program seems broken
|
||||
@ -61,7 +61,7 @@ RC=0
|
||||
gnu="ftp://ftp.gnu.org/pub/gnu"
|
||||
|
||||
# Check for Autoconf
|
||||
for command in autoconf autoconf213 autoconf253 autoconf259
|
||||
for command in autoconf autoconf213 autoconf253 autoconf259
|
||||
do
|
||||
if
|
||||
testProgram $command == 1
|
||||
@ -79,7 +79,7 @@ done
|
||||
# Check for automake
|
||||
for command in automake19 automake-1.9 automake
|
||||
do
|
||||
if
|
||||
if
|
||||
testProgram $command
|
||||
then
|
||||
automake=$command
|
||||
@ -88,13 +88,13 @@ do
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z $autoconf ]; then
|
||||
if [ -z $autoconf ]; then
|
||||
echo You must have autoconf installed to compile the corosync package.
|
||||
echo Download the appropriate package for your system,
|
||||
echo or get the source tarball at: $gnu/autoconf/
|
||||
exit 1
|
||||
|
||||
elif [ -z $automake ]; then
|
||||
elif [ -z $automake ]; then
|
||||
echo You must have automake installed to compile the corosync package.
|
||||
echo Download the appropriate package for your system,
|
||||
echo or get the source tarball at: $gnu/automake/
|
||||
@ -108,7 +108,7 @@ ln -s `which $automake` ./automake
|
||||
ln -s `which $autoheader` ./autoheader
|
||||
|
||||
printf "$autoconf:\t"
|
||||
$autoconf --version | head -n 1
|
||||
$autoconf --version | head -n 1
|
||||
|
||||
printf "$automake:\t"
|
||||
$automake --version | head -n 1
|
||||
|
@ -1,13 +1,13 @@
|
||||
# Copyright (c) 2009 Red Hat, Inc.
|
||||
#
|
||||
#
|
||||
# Authors: Andrew Beekhof
|
||||
# Steven Dake (sdake@redhat.com)
|
||||
#
|
||||
# This software licensed under BSD license, the text of which follows:
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
|
@ -166,7 +166,7 @@ memory_map (
|
||||
void *addr_orig;
|
||||
void *addr;
|
||||
int res;
|
||||
|
||||
|
||||
fd = open (path, O_RDWR, 0600);
|
||||
|
||||
unlink (path);
|
||||
@ -175,18 +175,18 @@ memory_map (
|
||||
|
||||
addr_orig = mmap (NULL, bytes, PROT_NONE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||
|
||||
|
||||
if (addr_orig == MAP_FAILED) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, fd, 0);
|
||||
|
||||
|
||||
if (addr != addr_orig) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
res = close (fd);
|
||||
if (res) {
|
||||
return (-1);
|
||||
@ -205,7 +205,7 @@ circular_memory_map (
|
||||
void *addr_orig;
|
||||
void *addr;
|
||||
int res;
|
||||
|
||||
|
||||
fd = open (path, O_RDWR, 0600);
|
||||
|
||||
unlink (path);
|
||||
@ -214,22 +214,22 @@ circular_memory_map (
|
||||
|
||||
addr_orig = mmap (NULL, bytes << 1, PROT_NONE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||
|
||||
|
||||
if (addr_orig == MAP_FAILED) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, fd, 0);
|
||||
|
||||
|
||||
if (addr != addr_orig) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
addr = mmap (((char *)addr_orig) + bytes,
|
||||
bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, fd, 0);
|
||||
|
||||
|
||||
res = close (fd);
|
||||
if (res) {
|
||||
return (-1);
|
||||
@ -453,7 +453,7 @@ static void *serveraddr2void (uint64_t server_addr)
|
||||
|
||||
u.server_addr = server_addr;
|
||||
return (u.server_ptr);
|
||||
};
|
||||
};
|
||||
|
||||
static inline void zerocopy_operations_process (
|
||||
struct conn_info *conn_info,
|
||||
@ -479,11 +479,11 @@ static inline void zerocopy_operations_process (
|
||||
res_header.size = sizeof (mar_res_header_t);
|
||||
res_header.id = 0;
|
||||
coroipcs_response_send (
|
||||
conn_info, &res_header,
|
||||
conn_info, &res_header,
|
||||
res_header.size);
|
||||
*new_message = 0;
|
||||
return;
|
||||
} else
|
||||
} else
|
||||
if (header->id == ZC_FREE_HEADER) {
|
||||
mar_req_coroipcc_zc_free_t *hdr = (mar_req_coroipcc_zc_free_t *)header;
|
||||
mar_res_header_t res_header;
|
||||
@ -496,15 +496,15 @@ static inline void zerocopy_operations_process (
|
||||
res_header.size = sizeof (mar_res_header_t);
|
||||
res_header.id = 0;
|
||||
coroipcs_response_send (
|
||||
conn_info, &res_header,
|
||||
conn_info, &res_header,
|
||||
res_header.size);
|
||||
|
||||
*new_message = 0;
|
||||
return;
|
||||
} else
|
||||
} else
|
||||
if (header->id == ZC_EXECUTE_HEADER) {
|
||||
mar_req_coroipcc_zc_execute_t *hdr = (mar_req_coroipcc_zc_execute_t *)header;
|
||||
|
||||
|
||||
header = (mar_req_header_t *)(((char *)serveraddr2void(hdr->server_address) + sizeof (struct coroipcs_zc_header)));
|
||||
}
|
||||
*header_out = header;
|
||||
@ -558,9 +558,9 @@ retry_semop:
|
||||
|
||||
send_ok = api->sending_allowed (conn_info->service,
|
||||
header->id,
|
||||
header,
|
||||
header,
|
||||
conn_info->sending_allowed_private_data);
|
||||
|
||||
|
||||
if (send_ok) {
|
||||
api->serialize_lock();
|
||||
api->handler_fn_get (conn_info->service, header->id) (conn_info, header);
|
||||
@ -574,7 +574,7 @@ retry_semop:
|
||||
res_overlay.header.id =
|
||||
api->response_id_get (conn_info->service, header->id);
|
||||
res_overlay.header.error = CS_ERR_TRY_AGAIN;
|
||||
coroipcs_response_send (conn_info, &res_overlay,
|
||||
coroipcs_response_send (conn_info, &res_overlay,
|
||||
res_overlay.header.size);
|
||||
}
|
||||
|
||||
@ -634,7 +634,7 @@ req_setup_recv (
|
||||
msg_recv.msg_flags = 0;
|
||||
uid_t euid;
|
||||
gid_t egid;
|
||||
|
||||
|
||||
euid = -1;
|
||||
egid = -1;
|
||||
if (getpeereid(conn_info->fd, &euid, &egid) != -1 &&
|
||||
@ -848,7 +848,7 @@ void coroipcs_ipc_exit (void)
|
||||
conn_info->dispatch_size);
|
||||
|
||||
semctl (conn_info->semid, 0, IPC_RMID);
|
||||
|
||||
|
||||
pthread_kill (conn_info->thread, SIGUSR1);
|
||||
}
|
||||
}
|
||||
@ -1290,7 +1290,7 @@ int coroipcs_handler_dispatch (
|
||||
/*
|
||||
* ipc thread is the only reference at startup
|
||||
*/
|
||||
conn_info->refcount = 1;
|
||||
conn_info->refcount = 1;
|
||||
conn_info->state = CONN_STATE_THREAD_ACTIVE;
|
||||
|
||||
conn_info->private_data = api->malloc (api->private_data_size_get (conn_info->service));
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -81,7 +81,7 @@ hdb_handle_t poll_create (void)
|
||||
if (res != 0) {
|
||||
goto error_destroy;
|
||||
}
|
||||
|
||||
|
||||
poll_instance->poll_entries = 0;
|
||||
poll_instance->ufds = 0;
|
||||
poll_instance->poll_entry_count = 0;
|
||||
@ -92,7 +92,7 @@ hdb_handle_t poll_create (void)
|
||||
|
||||
error_destroy:
|
||||
hdb_handle_destroy (&poll_instance_database, handle);
|
||||
|
||||
|
||||
error_exit:
|
||||
return (-1);
|
||||
}
|
||||
@ -164,7 +164,7 @@ int poll_dispatch_add (
|
||||
goto error_put;
|
||||
}
|
||||
poll_instance->poll_entries = poll_entries;
|
||||
|
||||
|
||||
ufds = (struct pollfd *)realloc (poll_instance->ufds,
|
||||
(poll_instance->poll_entry_count + 1) *
|
||||
sizeof (struct pollfd));
|
||||
@ -177,7 +177,7 @@ int poll_dispatch_add (
|
||||
poll_instance->poll_entry_count += 1;
|
||||
install_pos = poll_instance->poll_entry_count - 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Install new dispatch handler
|
||||
*/
|
||||
@ -222,7 +222,7 @@ int poll_dispatch_modify (
|
||||
if (poll_instance->poll_entries[i].ufd.fd == fd) {
|
||||
poll_instance->poll_entries[i].ufd.events = events;
|
||||
poll_instance->poll_entries[i].dispatch_fn = dispatch_fn;
|
||||
|
||||
|
||||
goto error_put;
|
||||
}
|
||||
}
|
||||
@ -336,7 +336,7 @@ int poll_stop (
|
||||
res = -ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
poll_instance->stop_requested = 1;
|
||||
|
||||
hdb_handle_put (&poll_instance_database, handle);
|
||||
@ -391,7 +391,7 @@ retry_poll:
|
||||
poll_instance->ufds[i].revents) {
|
||||
|
||||
res = poll_instance->poll_entries[i].dispatch_fn (handle,
|
||||
poll_instance->ufds[i].fd,
|
||||
poll_instance->ufds[i].fd,
|
||||
poll_instance->ufds[i].revents,
|
||||
poll_instance->poll_entries[i].data);
|
||||
|
||||
@ -434,5 +434,5 @@ void poll_print_state (
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -130,7 +130,7 @@ typedef uint64_t ulong64;
|
||||
(((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \
|
||||
(((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); }
|
||||
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
|
||||
#define STORE32L(x, y) \
|
||||
{ unsigned long __t = (x); memcpy(y, &__t, 4); }
|
||||
@ -191,7 +191,7 @@ typedef uint64_t ulong64;
|
||||
(((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \
|
||||
(((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); }
|
||||
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
|
||||
#define STORE32H(x, y) \
|
||||
{ unsigned long __t = (x); memcpy(y, &__t, 4); }
|
||||
@ -384,7 +384,7 @@ int func_name (hash_state * md, const unsigned char *buf, unsigned long len)
|
||||
(((ulong64)((y)[4] & 255))<<24)|(((ulong64)((y)[5] & 255))<<16) | \
|
||||
(((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); }
|
||||
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
|
||||
#define STORE32L(x, y) \
|
||||
{ unsigned long __t = (x); memcpy(y, &__t, 4); }
|
||||
@ -445,7 +445,7 @@ int func_name (hash_state * md, const unsigned char *buf, unsigned long len)
|
||||
(((ulong64)((y)[3] & 255))<<24)|(((ulong64)((y)[2] & 255))<<16) | \
|
||||
(((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); }
|
||||
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
#ifdef ENDIAN_32BITWORD
|
||||
|
||||
#define STORE32H(x, y) \
|
||||
{ unsigned long __t = (x); memcpy(y, &__t, 4); }
|
||||
@ -583,7 +583,7 @@ static const ulong32 Multab[256] = {
|
||||
* "On the Design of 8*32 S-boxes". Unpublished report, by the
|
||||
* Information Systems Research Centre,
|
||||
* Queensland University of Technology, 1999.
|
||||
*
|
||||
*
|
||||
* The most significant 8 bits are the Skipjack "F table", which can be
|
||||
* found at http://csrc.nist.gov/CryptoToolkit/skipjack/skipjack.pdf .
|
||||
* In this optimised table, though, the intent is to XOR the word from
|
||||
@ -663,7 +663,7 @@ static const ulong32 Sbox[256] = {
|
||||
* Based on s128fast.c reference code supplied by Greg Rose of QUALCOMM.
|
||||
*/
|
||||
|
||||
const struct _prng_descriptor sober128_desc =
|
||||
const struct _prng_descriptor sober128_desc =
|
||||
{
|
||||
"sober128", 64,
|
||||
&sober128_start,
|
||||
@ -752,7 +752,7 @@ int sober128_start(prng_state *prng)
|
||||
struct sober128_prng *c;
|
||||
|
||||
c = &(prng->sober128);
|
||||
|
||||
|
||||
/* Register initialised to Fibonacci numbers */
|
||||
c->R[0] = 1;
|
||||
c->R[1] = 1;
|
||||
@ -811,7 +811,7 @@ static void s128_genkonst(struct sober128_prng *c)
|
||||
c->R[FOLDP] ^= (nl);
|
||||
|
||||
/* nonlinear diffusion of register for key */
|
||||
#define DROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); c->R[OFF((z+1),FOLDP)] ^= t;
|
||||
#define DROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); c->R[OFF((z+1),FOLDP)] ^= t;
|
||||
static void s128_diffuse(struct sober128_prng *c)
|
||||
{
|
||||
ulong32 t;
|
||||
@ -846,7 +846,7 @@ int sober128_add_entropy(const unsigned char *buf, unsigned long len, prng_state
|
||||
/* this is the first call to the add_entropy so this input is the key */
|
||||
/* len must be multiple of 4 bytes */
|
||||
assert ((len & 3) == 0);
|
||||
|
||||
|
||||
for (i = 0; i < len; i += 4) {
|
||||
k = BYTE2WORD(&buf[i]);
|
||||
ADDKEY(k);
|
||||
@ -863,7 +863,7 @@ int sober128_add_entropy(const unsigned char *buf, unsigned long len, prng_state
|
||||
s128_genkonst(c);
|
||||
s128_savestate(c);
|
||||
c->nbuf = 0;
|
||||
c->flag = 0;
|
||||
c->flag = 0;
|
||||
c->set = 1;
|
||||
} else {
|
||||
/* ok we are adding an IV then... */
|
||||
@ -871,7 +871,7 @@ int sober128_add_entropy(const unsigned char *buf, unsigned long len, prng_state
|
||||
|
||||
/* len must be multiple of 4 bytes */
|
||||
assert ((len & 3) == 0);
|
||||
|
||||
|
||||
for (i = 0; i < len; i += 4) {
|
||||
k = BYTE2WORD(&buf[i]);
|
||||
ADDKEY(k);
|
||||
@ -907,7 +907,7 @@ unsigned long sober128_read(unsigned char *buf, unsigned long nbytes, prng_state
|
||||
c = &(prng->sober128);
|
||||
t = 0;
|
||||
tlen = nbytes;
|
||||
|
||||
|
||||
/* handle any previously buffered bytes */
|
||||
while (c->nbuf != 0 && nbytes != 0) {
|
||||
*buf++ ^= c->sbuf & 0xFF;
|
||||
@ -976,7 +976,7 @@ const struct _hash_descriptor sha1_desc =
|
||||
64,
|
||||
|
||||
/* DER identifier */
|
||||
{ 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E,
|
||||
{ 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E,
|
||||
0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14 },
|
||||
15,
|
||||
|
||||
@ -1008,7 +1008,7 @@ static void sha1_compress(hash_state *md, const unsigned char *buf)
|
||||
|
||||
/* expand it */
|
||||
for (i = 16; i < 80; i++) {
|
||||
W[i] = ROL(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
|
||||
W[i] = ROL(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
|
||||
}
|
||||
|
||||
/* compress */
|
||||
@ -1017,7 +1017,7 @@ static void sha1_compress(hash_state *md, const unsigned char *buf)
|
||||
#define FF1(a,b,c,d,e,i) e = (ROL(a, 5) + F1(b,c,d) + e + W[i] + 0x6ed9eba1UL); b = ROL(b, 30);
|
||||
#define FF2(a,b,c,d,e,i) e = (ROL(a, 5) + F2(b,c,d) + e + W[i] + 0x8f1bbcdcUL); b = ROL(b, 30);
|
||||
#define FF3(a,b,c,d,e,i) e = (ROL(a, 5) + F3(b,c,d) + e + W[i] + 0xca62c1d6UL); b = ROL(b, 30);
|
||||
|
||||
|
||||
for (i = 0; i < 20; ) {
|
||||
FF0(a,b,c,d,e,i++);
|
||||
FF0(e,a,b,c,d,i++);
|
||||
@ -1027,7 +1027,7 @@ static void sha1_compress(hash_state *md, const unsigned char *buf)
|
||||
}
|
||||
|
||||
/* round two */
|
||||
for (; i < 40; ) {
|
||||
for (; i < 40; ) {
|
||||
FF1(a,b,c,d,e,i++);
|
||||
FF1(e,a,b,c,d,i++);
|
||||
FF1(d,e,a,b,c,i++);
|
||||
@ -1036,7 +1036,7 @@ static void sha1_compress(hash_state *md, const unsigned char *buf)
|
||||
}
|
||||
|
||||
/* round three */
|
||||
for (; i < 60; ) {
|
||||
for (; i < 60; ) {
|
||||
FF2(a,b,c,d,e,i++);
|
||||
FF2(e,a,b,c,d,i++);
|
||||
FF2(d,e,a,b,c,i++);
|
||||
@ -1045,7 +1045,7 @@ static void sha1_compress(hash_state *md, const unsigned char *buf)
|
||||
}
|
||||
|
||||
/* round four */
|
||||
for (; i < 80; ) {
|
||||
for (; i < 80; ) {
|
||||
FF3(a,b,c,d,e,i++);
|
||||
FF3(e,a,b,c,d,i++);
|
||||
FF3(d,e,a,b,c,i++);
|
||||
@ -1086,7 +1086,7 @@ int sha1_done(hash_state * md, unsigned char *hash)
|
||||
/*
|
||||
* Assert there isn't an invalid argument
|
||||
*/
|
||||
assert (md->sha1.curlen < sizeof (md->sha1.buf));
|
||||
assert (md->sha1.curlen < sizeof (md->sha1.buf));
|
||||
|
||||
/* increase the length of the message */
|
||||
md->sha1.length += md->sha1.curlen * 8;
|
||||
@ -1169,7 +1169,7 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon
|
||||
hash_descriptor[hash]->init(&hmac->md);
|
||||
err = hash_descriptor[hash]->process(&hmac->md, buf, hash_descriptor[hash]->blocksize);
|
||||
|
||||
return err;
|
||||
return err;
|
||||
}
|
||||
|
||||
int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned long len)
|
||||
@ -1231,7 +1231,7 @@ int hmac_done(hmac_state *hmac, unsigned char *hashOut, unsigned long *outlen)
|
||||
goto __ERR;
|
||||
}
|
||||
|
||||
// copy to output
|
||||
// copy to output
|
||||
for (i = 0; i < hashsize && i < *outlen; i++) {
|
||||
hashOut[i] = buf[i];
|
||||
}
|
||||
@ -1250,14 +1250,14 @@ const struct _hash_descriptor *hash_descriptor[] =
|
||||
|
||||
/* portable way to get secure random bits to feed a PRNG */
|
||||
/* on *NIX read /dev/random */
|
||||
static unsigned long rng_nix(unsigned char *buf, unsigned long len,
|
||||
static unsigned long rng_nix(unsigned char *buf, unsigned long len,
|
||||
void (*callback)(void))
|
||||
{
|
||||
int fd;
|
||||
unsigned long rb;
|
||||
|
||||
fd = open ("/dev/urandom", O_RDONLY);
|
||||
|
||||
|
||||
rb = (unsigned long)read (fd, buf, len);
|
||||
|
||||
close (fd);
|
||||
@ -1270,7 +1270,7 @@ static unsigned long rng_nix(unsigned char *buf, unsigned long len,
|
||||
|
||||
#define ANSI_RNG
|
||||
|
||||
static unsigned long rng_ansic(unsigned char *buf, unsigned long len,
|
||||
static unsigned long rng_ansic(unsigned char *buf, unsigned long len,
|
||||
void (*callback)(void))
|
||||
{
|
||||
clock_t t1;
|
||||
@ -1292,7 +1292,7 @@ static unsigned long rng_ansic(unsigned char *buf, unsigned long len,
|
||||
} while (a == b);
|
||||
acc = (acc << 1) | a;
|
||||
}
|
||||
*buf++ = acc;
|
||||
*buf++ = acc;
|
||||
acc = 0;
|
||||
bits = 8;
|
||||
}
|
||||
@ -1300,9 +1300,9 @@ static unsigned long rng_ansic(unsigned char *buf, unsigned long len,
|
||||
return l;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
unsigned long rng_get_bytes(unsigned char *buf, unsigned long len,
|
||||
unsigned long rng_get_bytes(unsigned char *buf, unsigned long len,
|
||||
void (*callback)(void))
|
||||
{
|
||||
unsigned long x;
|
||||
@ -1314,12 +1314,12 @@ unsigned long rng_get_bytes(unsigned char *buf, unsigned long len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rng_make_prng(int bits, int wprng, prng_state *prng,
|
||||
int rng_make_prng(int bits, int wprng, prng_state *prng,
|
||||
void (*callback)(void))
|
||||
{
|
||||
unsigned char buf[256];
|
||||
int err;
|
||||
|
||||
|
||||
if (bits < 64 || bits > 1024) {
|
||||
return CRYPT_INVALID_PRNGSIZE;
|
||||
}
|
||||
|
@ -86,19 +86,19 @@ int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned long len);
|
||||
int hmac_done(hmac_state *hmac, unsigned char *hashOut, unsigned long *outlen);
|
||||
int hmac_test(void);
|
||||
int hmac_memory(int hash, const unsigned char *key, unsigned long keylen,
|
||||
const unsigned char *data, unsigned long len,
|
||||
const unsigned char *data, unsigned long len,
|
||||
unsigned char *dst, unsigned long *dstlen);
|
||||
|
||||
struct sober128_prng {
|
||||
uint32_t R[17], /* Working storage for the shift register */
|
||||
initR[17], /* saved register contents */
|
||||
initR[17], /* saved register contents */
|
||||
konst, /* key dependent constant */
|
||||
sbuf; /* partial word encryption buffer */
|
||||
|
||||
int nbuf, /* number of part-word stream bits buffered */
|
||||
flag, /* first add_entropy call or not? */
|
||||
set; /* did we call add_entropy to set key? */
|
||||
|
||||
|
||||
};
|
||||
|
||||
typedef union Prng_state {
|
||||
@ -125,8 +125,8 @@ int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
|
||||
int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng);
|
||||
int sober128_test(void);
|
||||
|
||||
unsigned long rng_get_bytes(unsigned char *buf,
|
||||
unsigned long len,
|
||||
unsigned long rng_get_bytes(unsigned char *buf,
|
||||
unsigned long len,
|
||||
void (*callback)(void));
|
||||
|
||||
int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void));
|
||||
|
@ -9,7 +9,7 @@
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -245,8 +245,8 @@ static inline void records_reclaim (unsigned int idx, unsigned int words)
|
||||
|
||||
words_needed -= flt_data[flt_data[FDTAIL_INDEX]];
|
||||
old_tail = flt_data[FDTAIL_INDEX];
|
||||
flt_data[FDTAIL_INDEX] =
|
||||
(flt_data[FDTAIL_INDEX] +
|
||||
flt_data[FDTAIL_INDEX] =
|
||||
(flt_data[FDTAIL_INDEX] +
|
||||
flt_data[flt_data[FDTAIL_INDEX]]) % (flt_data_size);
|
||||
if (log_rec_idx == old_tail) {
|
||||
log_requests_lost += 1;
|
||||
@ -301,7 +301,7 @@ static inline int strcpy_cutoff (char *dest, const char *src, int cutoff)
|
||||
* %p PRIORITY
|
||||
* %t TIMESTAMP
|
||||
* %b BUFFER
|
||||
*
|
||||
*
|
||||
* any number between % and character specify field length to pad or chop
|
||||
*/
|
||||
static void log_printf_to_logs (
|
||||
@ -337,7 +337,7 @@ static void log_printf_to_logs (
|
||||
while (isdigit (format_buffer[format_buffer_idx])) {
|
||||
format_buffer_idx += 1;
|
||||
}
|
||||
|
||||
|
||||
switch (format_buffer[format_buffer_idx]) {
|
||||
case 's':
|
||||
len = strcpy_cutoff (&output_buffer[output_buffer_idx], subsys, cutoff);
|
||||
@ -387,7 +387,7 @@ static void log_printf_to_logs (
|
||||
* Output to syslog
|
||||
*/
|
||||
if ((logsys_loggers[subsysid].mode & LOGSYS_MODE_OUTPUT_SYSLOG) &&
|
||||
((level <= logsys_loggers[subsysid].syslog_priority) ||
|
||||
((level <= logsys_loggers[subsysid].syslog_priority) ||
|
||||
(logsys_loggers[subsysid].debug != 0))) {
|
||||
syslog (level | logsys_loggers[subsysid].syslog_facility, "%s", output_buffer);
|
||||
}
|
||||
@ -765,7 +765,7 @@ static void logsys_subsys_init (
|
||||
&logsys_loggers[LOGSYS_MAX_SUBSYS_COUNT],
|
||||
sizeof(logsys_loggers[LOGSYS_MAX_SUBSYS_COUNT]));
|
||||
logsys_loggers[subsysid].tags = LOGSYS_TAG_LOG;
|
||||
logsys_loggers[subsysid].init_status =
|
||||
logsys_loggers[subsysid].init_status =
|
||||
LOGSYS_LOGGER_INIT_DONE;
|
||||
}
|
||||
strncpy (logsys_loggers[subsysid].subsys, subsys,
|
||||
@ -851,7 +851,7 @@ unsigned int _logsys_subsys_create (const char *subsys)
|
||||
|
||||
for (i = 0; i < LOGSYS_MAX_SUBSYS_COUNT; i++) {
|
||||
if (strcmp (logsys_loggers[i].subsys, "") == 0) {
|
||||
logsys_subsys_init(subsys, i);
|
||||
logsys_subsys_init(subsys, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -864,7 +864,7 @@ unsigned int _logsys_subsys_create (const char *subsys)
|
||||
|
||||
int _logsys_wthread_create (void)
|
||||
{
|
||||
if (((logsys_loggers[LOGSYS_MAX_SUBSYS_COUNT].mode & LOGSYS_MODE_FORK) == 0) &&
|
||||
if (((logsys_loggers[LOGSYS_MAX_SUBSYS_COUNT].mode & LOGSYS_MODE_FORK) == 0) &&
|
||||
((logsys_loggers[LOGSYS_MAX_SUBSYS_COUNT].mode & LOGSYS_MODE_THREADED) != 0)) {
|
||||
wthread_create();
|
||||
atexit (logsys_atexit);
|
||||
@ -928,7 +928,7 @@ void _logsys_log_rec (
|
||||
int words_written;
|
||||
|
||||
record_reclaim_size = 0;
|
||||
|
||||
|
||||
/*
|
||||
* Decode VA Args
|
||||
*/
|
||||
@ -1045,7 +1045,7 @@ void _logsys_log_rec (
|
||||
flt_data[index_start] = words_written;
|
||||
|
||||
/*
|
||||
* If the index of the current head equals the current log_rec_idx,
|
||||
* If the index of the current head equals the current log_rec_idx,
|
||||
* and this is not a log_printf operation, set the log_rec_idx to
|
||||
* the new head position and commit the new head.
|
||||
*/
|
||||
|
26
exec/main.c
26
exec/main.c
@ -165,7 +165,7 @@ static void *corosync_exit (void *arg)
|
||||
}
|
||||
|
||||
pthread_t corosync_exit_thread;
|
||||
static void init_shutdown(void *data)
|
||||
static void init_shutdown(void *data)
|
||||
{
|
||||
pthread_create (&corosync_exit_thread, NULL, corosync_exit, NULL);
|
||||
}
|
||||
@ -248,7 +248,7 @@ static int corosync_sync_callbacks_retrieve (int sync_id,
|
||||
{
|
||||
unsigned int ais_service_index;
|
||||
unsigned int ais_services_found = 0;
|
||||
|
||||
|
||||
for (ais_service_index = 0;
|
||||
ais_service_index < SERVICE_HANDLER_MAXIMUM_COUNT;
|
||||
ais_service_index++) {
|
||||
@ -348,7 +348,7 @@ static void corosync_tty_detach (void)
|
||||
/* Create new session */
|
||||
(void)setsid();
|
||||
|
||||
/*
|
||||
/*
|
||||
* Map stdin/out/err to /dev/null.
|
||||
*/
|
||||
fd = open("/dev/null", O_RDWR);
|
||||
@ -359,7 +359,7 @@ static void corosync_tty_detach (void)
|
||||
dup2(fd, STDERR_FILENO); /* 2 */
|
||||
|
||||
/* Should be 0, but just in case it isn't... */
|
||||
if (fd > 2)
|
||||
if (fd > 2)
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
@ -564,7 +564,7 @@ struct sending_allowed_private_data_struct {
|
||||
|
||||
static int corosync_sending_allowed (
|
||||
unsigned int service,
|
||||
unsigned int id,
|
||||
unsigned int id,
|
||||
void *msg,
|
||||
void *sending_allowed_private_data)
|
||||
{
|
||||
@ -607,20 +607,20 @@ static void ipc_log_printf (const char *format, ...) {
|
||||
|
||||
va_start (ap, format);
|
||||
|
||||
_logsys_log_printf (ipc_subsys_id, __FUNCTION__,
|
||||
_logsys_log_printf (ipc_subsys_id, __FUNCTION__,
|
||||
__FILE__, __LINE__, LOGSYS_LEVEL_ERROR, format, ap);
|
||||
|
||||
va_end (ap);
|
||||
}
|
||||
|
||||
static void ipc_fatal_error(const char *error_msg) {
|
||||
_logsys_log_printf (ipc_subsys_id, __FUNCTION__,
|
||||
_logsys_log_printf (ipc_subsys_id, __FUNCTION__,
|
||||
__FILE__, __LINE__, LOGSYS_LEVEL_ERROR, "%s", error_msg);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static int corosync_poll_handler_accept (
|
||||
hdb_handle_t handle,
|
||||
hdb_handle_t handle,
|
||||
int fd,
|
||||
int revent,
|
||||
void *context)
|
||||
@ -629,7 +629,7 @@ static int corosync_poll_handler_accept (
|
||||
}
|
||||
|
||||
static int corosync_poll_handler_dispatch (
|
||||
hdb_handle_t handle,
|
||||
hdb_handle_t handle,
|
||||
int fd,
|
||||
int revent,
|
||||
void *context)
|
||||
@ -708,9 +708,9 @@ int main (int argc, char **argv)
|
||||
*/
|
||||
background = 1;
|
||||
setprio = 1;
|
||||
|
||||
|
||||
while ((ch = getopt (argc, argv, "fp")) != EOF) {
|
||||
|
||||
|
||||
switch (ch) {
|
||||
case 'f':
|
||||
background = 0;
|
||||
@ -726,7 +726,7 @@ int main (int argc, char **argv)
|
||||
" -p : Do not set process priority. \n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (background)
|
||||
corosync_tty_detach ();
|
||||
@ -743,7 +743,7 @@ int main (int argc, char **argv)
|
||||
#if MSG_NOSIGNAL == 0
|
||||
(void)signal (SIGPIPE, SIG_IGN);
|
||||
#endif
|
||||
|
||||
|
||||
corosync_timer_init (
|
||||
serialize_lock,
|
||||
serialize_unlock,
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -84,7 +84,7 @@ int mempool_init (int pool_sizes[MEMPOOL_GROUP_SIZE])
|
||||
list_init (&mempool_group[i].free);
|
||||
mempool_group[i].free_entries = pool_sizes[i];
|
||||
mempool_group[i].used_entries = 0;
|
||||
|
||||
|
||||
for (j = 0; j < pool_sizes[i]; j++) {
|
||||
entry = (struct mempool_entry *)p;
|
||||
|
||||
@ -121,7 +121,7 @@ void *mempool_malloc (size_t size)
|
||||
|
||||
if (((1 << i) >= size) &&
|
||||
mempool_group[i].free_entries) {
|
||||
|
||||
|
||||
mempool_group[i].used_entries += 1;
|
||||
mempool_group[i].free_entries -= 1;
|
||||
mempool_entry = list_entry (mempool_group[i].free.next,
|
||||
@ -157,7 +157,7 @@ void *mempool_realloc (void *ptr, size_t size) {
|
||||
void *new_ptr;
|
||||
|
||||
mempool_entry = ((struct mempool_entry *)((unsigned long)(ptr) - (unsigned long)(&((struct mempool_entry *)0)->mem)));
|
||||
|
||||
|
||||
if (ptr == 0 || (1 << mempool_entry->mempool_entry) < size) {
|
||||
/*
|
||||
* Must grow allocated block, copy memory, free old block
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -211,7 +211,7 @@ static int corosync_service_unlink_common (
|
||||
struct corosync_api_v1 *corosync_api,
|
||||
hdb_handle_t object_service_handle,
|
||||
const char *service_name,
|
||||
unsigned int service_version)
|
||||
unsigned int service_version)
|
||||
{
|
||||
unsigned int res;
|
||||
unsigned short *service_id;
|
||||
@ -222,13 +222,13 @@ static int corosync_service_unlink_common (
|
||||
strlen ("handle"),
|
||||
(void *)&found_service_handle,
|
||||
NULL);
|
||||
|
||||
|
||||
res = corosync_api->object_key_get (object_service_handle,
|
||||
"service_id",
|
||||
strlen ("service_id"),
|
||||
(void *)&service_id,
|
||||
NULL);
|
||||
|
||||
|
||||
log_printf(LOGSYS_LEVEL_NOTICE, "Unloading corosync component: %s v%u\n",
|
||||
service_name, service_version);
|
||||
|
||||
@ -236,8 +236,8 @@ static int corosync_service_unlink_common (
|
||||
ais_service[*service_id]->exec_exit_fn ();
|
||||
}
|
||||
ais_service[*service_id] = NULL;
|
||||
|
||||
return lcr_ifact_release (*found_service_handle);
|
||||
|
||||
return lcr_ifact_release (*found_service_handle);
|
||||
}
|
||||
|
||||
extern unsigned int corosync_service_unlink_and_exit (
|
||||
@ -300,7 +300,7 @@ extern unsigned int corosync_service_unlink_all (
|
||||
unsigned int *service_ver;
|
||||
hdb_handle_t object_service_handle;
|
||||
hdb_handle_t object_find_handle;
|
||||
int found;
|
||||
int found;
|
||||
|
||||
log_printf(LOGSYS_LEVEL_NOTICE, "Unloading all corosync components\n");
|
||||
|
||||
@ -365,7 +365,7 @@ unsigned int corosync_service_defaults_link_and_init (struct corosync_api_v1 *co
|
||||
char *found_service_ver;
|
||||
unsigned int found_service_ver_atoi;
|
||||
hdb_handle_t object_find_handle;
|
||||
|
||||
|
||||
corosync_api->object_create (OBJECT_PARENT_HANDLE,
|
||||
&object_internal_configuration_handle,
|
||||
"internal_configuration",
|
||||
@ -415,6 +415,6 @@ unsigned int corosync_service_defaults_link_and_init (struct corosync_api_v1 *co
|
||||
default_services[i].name,
|
||||
default_services[i].ver);
|
||||
}
|
||||
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
@ -273,7 +273,7 @@ int sync_register (
|
||||
log_printf (LOGSYS_LEVEL_ERROR, "Couldn't join group.\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
sync_callbacks_retrieve = callbacks_retrieve;
|
||||
sync_synchronization_completed = synchronization_completed;
|
||||
return (0);
|
||||
|
10
exec/tlist.h
10
exec/tlist.h
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -119,7 +119,7 @@ static inline int timerlist_add_absolute (struct timerlist *timerlist,
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
timer->nano_from_epoch = nano_from_epoch;
|
||||
timer->data = data;
|
||||
timer->timer_fn = timer_fn;
|
||||
@ -143,7 +143,7 @@ static inline int timerlist_add_duration (struct timerlist *timerlist,
|
||||
errno = ENOMEM;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
timer->nano_from_epoch = timerlist_nano_from_epoch() + nano_duration;
|
||||
timer->data = data;
|
||||
timer->timer_fn = timer_fn;
|
||||
@ -211,7 +211,7 @@ static inline unsigned long long timerlist_msec_duration_to_expire (struct timer
|
||||
if (timerlist->timer_head.next == &timerlist->timer_head) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
timer_from_list = list_entry (timerlist->timer_head.next,
|
||||
struct timerlist_timer, list);
|
||||
|
||||
@ -223,7 +223,7 @@ static inline unsigned long long timerlist_msec_duration_to_expire (struct timer
|
||||
if (timer_from_list->nano_from_epoch < nano_from_epoch) {
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
msec_duration_to_expire = ((timer_from_list->nano_from_epoch - nano_from_epoch) / 1000000ULL) +
|
||||
(1000 / HZ);
|
||||
return (msec_duration_to_expire);
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -48,7 +48,7 @@ extern int totem_config_read (
|
||||
struct objdb_iface_ver0 *objdb,
|
||||
struct totem_config *totem_config,
|
||||
const char **error_string);
|
||||
|
||||
|
||||
extern int totem_config_validate (
|
||||
struct totem_config *totem_config,
|
||||
const char **error_string);
|
||||
|
@ -69,9 +69,9 @@
|
||||
|
||||
#include "crypto.h"
|
||||
|
||||
#define MCAST_SOCKET_BUFFER_SIZE (TRANSMITS_ALLOWED * FRAME_SIZE_MAX)
|
||||
#define MCAST_SOCKET_BUFFER_SIZE (TRANSMITS_ALLOWED * FRAME_SIZE_MAX)
|
||||
|
||||
#define NETIF_STATE_REPORT_UP 1
|
||||
#define NETIF_STATE_REPORT_UP 1
|
||||
#define NETIF_STATE_REPORT_DOWN 2
|
||||
|
||||
#define BIND_STATE_UNBOUND 0
|
||||
@ -254,7 +254,7 @@ static int authenticate_and_decrypt (
|
||||
memset (keys, 0, sizeof (keys));
|
||||
sober128_start (&keygen_prng_state);
|
||||
sober128_add_entropy (instance->totemnet_private_key,
|
||||
instance->totemnet_private_key_len, &keygen_prng_state);
|
||||
instance->totemnet_private_key_len, &keygen_prng_state);
|
||||
sober128_add_entropy (header->salt, sizeof (header->salt), &keygen_prng_state);
|
||||
|
||||
sober128_read (keys, sizeof (keys), &keygen_prng_state);
|
||||
@ -263,15 +263,15 @@ static int authenticate_and_decrypt (
|
||||
* Setup stream cipher
|
||||
*/
|
||||
sober128_start (&stream_prng_state);
|
||||
sober128_add_entropy (cipher_key, 16, &stream_prng_state);
|
||||
sober128_add_entropy (initial_vector, 16, &stream_prng_state);
|
||||
sober128_add_entropy (cipher_key, 16, &stream_prng_state);
|
||||
sober128_add_entropy (initial_vector, 16, &stream_prng_state);
|
||||
|
||||
/*
|
||||
* Authenticate contents of message
|
||||
*/
|
||||
hmac_init (&instance->totemnet_hmac_state, DIGEST_SHA1, hmac_key, 16);
|
||||
|
||||
hmac_process (&instance->totemnet_hmac_state,
|
||||
hmac_process (&instance->totemnet_hmac_state,
|
||||
(unsigned char *)iov->iov_base + HMAC_HASH_SIZE,
|
||||
iov->iov_len - HMAC_HASH_SIZE);
|
||||
|
||||
@ -283,7 +283,7 @@ static int authenticate_and_decrypt (
|
||||
log_printf (instance->totemnet_log_level_security, "Received message has invalid digest... ignoring.\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Decrypt the contents of the message with the cipher key
|
||||
*/
|
||||
@ -328,7 +328,7 @@ static void encrypt_and_sign_worker (
|
||||
sober128_start (&keygen_prng_state);
|
||||
sober128_add_entropy (instance->totemnet_private_key,
|
||||
instance->totemnet_private_key_len,
|
||||
&keygen_prng_state);
|
||||
&keygen_prng_state);
|
||||
sober128_add_entropy (header->salt, sizeof (header->salt),
|
||||
&keygen_prng_state);
|
||||
|
||||
@ -338,8 +338,8 @@ static void encrypt_and_sign_worker (
|
||||
* Setup stream cipher
|
||||
*/
|
||||
sober128_start (&stream_prng_state);
|
||||
sober128_add_entropy (cipher_key, 16, &stream_prng_state);
|
||||
sober128_add_entropy (initial_vector, 16, &stream_prng_state);
|
||||
sober128_add_entropy (cipher_key, 16, &stream_prng_state);
|
||||
sober128_add_entropy (initial_vector, 16, &stream_prng_state);
|
||||
|
||||
outlen = sizeof (struct security_header);
|
||||
/*
|
||||
@ -365,7 +365,7 @@ static void encrypt_and_sign_worker (
|
||||
*/
|
||||
hmac_init (&hmac_st, DIGEST_SHA1, hmac_key, 16);
|
||||
|
||||
hmac_process (&hmac_st,
|
||||
hmac_process (&hmac_st,
|
||||
buf + HMAC_HASH_SIZE,
|
||||
outlen - HMAC_HASH_SIZE);
|
||||
|
||||
@ -682,7 +682,7 @@ static int net_deliver_fn (
|
||||
instance->context,
|
||||
msg_offset,
|
||||
size_delv);
|
||||
|
||||
|
||||
iovec->iov_len = FRAME_SIZE_MAX;
|
||||
return (0);
|
||||
}
|
||||
@ -703,7 +703,7 @@ static int netif_determine (
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* If the interface is up, the sockets for totem are built. If the interface is down
|
||||
@ -827,7 +827,7 @@ static void timer_function_netif_check_timeout (
|
||||
&instance->timer_netif_check_timeout);
|
||||
}
|
||||
|
||||
} else {
|
||||
} else {
|
||||
if (instance->netif_state_report & NETIF_STATE_REPORT_DOWN) {
|
||||
log_printf (instance->totemnet_log_level_notice,
|
||||
"The network interface is down.\n");
|
||||
@ -881,7 +881,7 @@ static int totemnet_build_sockets_ip (
|
||||
int addrlen;
|
||||
int res;
|
||||
int flag;
|
||||
|
||||
|
||||
/*
|
||||
* Create multicast recv socket
|
||||
*/
|
||||
@ -898,11 +898,11 @@ static int totemnet_build_sockets_ip (
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Force reuse
|
||||
*/
|
||||
flag = 1;
|
||||
if ( setsockopt(sockets->mcast_recv, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag)) < 0) {
|
||||
if ( setsockopt(sockets->mcast_recv, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag)) < 0) {
|
||||
perror("setsockopt reuseaddr");
|
||||
return (-1);
|
||||
}
|
||||
@ -934,11 +934,11 @@ static int totemnet_build_sockets_ip (
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Force reuse
|
||||
*/
|
||||
flag = 1;
|
||||
if ( setsockopt(sockets->mcast_send, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag)) < 0) {
|
||||
if ( setsockopt(sockets->mcast_send, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag)) < 0) {
|
||||
perror("setsockopt reuseaddr");
|
||||
return (-1);
|
||||
}
|
||||
@ -967,11 +967,11 @@ static int totemnet_build_sockets_ip (
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Force reuse
|
||||
*/
|
||||
flag = 1;
|
||||
if ( setsockopt(sockets->token, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag)) < 0) {
|
||||
if ( setsockopt(sockets->token, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof (flag)) < 0) {
|
||||
perror("setsockopt reuseaddr");
|
||||
return (-1);
|
||||
}
|
||||
@ -1038,7 +1038,7 @@ static int totemnet_build_sockets_ip (
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Turn on multicast loopback
|
||||
*/
|
||||
@ -1102,7 +1102,7 @@ static int totemnet_build_sockets_ip (
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1139,7 +1139,7 @@ static int totemnet_build_sockets (
|
||||
totemnet_traffic_control_set(instance, sockets->token);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Totem Network interface - also does encryption/decryption
|
||||
* depends on poll abstraction, POSIX, IPV4
|
||||
@ -1323,7 +1323,7 @@ int totemnet_send_flush (hdb_handle_t handle)
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
worker_thread_group_wait (&instance->worker_thread_group);
|
||||
|
||||
hdb_handle_put (&totemnet_instance_database, handle);
|
||||
@ -1368,7 +1368,7 @@ int totemnet_mcast_flush_send (
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
mcast_sendmsg (instance, iovec, iov_len);
|
||||
|
||||
hdb_handle_put (&totemnet_instance_database, handle);
|
||||
@ -1392,18 +1392,18 @@ int totemnet_mcast_noflush_send (
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
if (instance->totem_config->threads) {
|
||||
memcpy (&work_item.iovec[0], iovec, iov_len * sizeof (struct iovec));
|
||||
work_item.iov_len = iov_len;
|
||||
work_item.instance = instance;
|
||||
|
||||
worker_thread_group_work_add (&instance->worker_thread_group,
|
||||
&work_item);
|
||||
&work_item);
|
||||
} else {
|
||||
mcast_sendmsg (instance, iovec, iov_len);
|
||||
}
|
||||
|
||||
|
||||
hdb_handle_put (&totemnet_instance_database, handle);
|
||||
error_exit:
|
||||
return (res);
|
||||
@ -1420,7 +1420,7 @@ extern int totemnet_iface_check (hdb_handle_t handle)
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
timer_function_netif_check_timeout (instance);
|
||||
|
||||
hdb_handle_put (&totemnet_instance_database, handle);
|
||||
@ -1450,7 +1450,7 @@ const char *totemnet_iface_print (hdb_handle_t handle) {
|
||||
ret_char = "Invalid totemnet handle";
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
ret_char = totemip_print (&instance->my_id);
|
||||
|
||||
hdb_handle_put (&totemnet_instance_database, handle);
|
||||
@ -1470,7 +1470,7 @@ int totemnet_iface_get (
|
||||
if (res != 0) {
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
memcpy (addr, &instance->my_id, sizeof (struct totem_ip_address));
|
||||
|
||||
hdb_handle_put (&totemnet_instance_database, handle);
|
||||
@ -1491,7 +1491,7 @@ int totemnet_token_target_set (
|
||||
if (res != 0) {
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
memcpy (&instance->token_target, token_target,
|
||||
sizeof (struct totem_ip_address));
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -123,16 +123,16 @@ struct totempg_mcast_header {
|
||||
*/
|
||||
struct totempg_mcast {
|
||||
struct totempg_mcast_header header;
|
||||
unsigned char fragmented;
|
||||
unsigned char continuation;
|
||||
unsigned char fragmented;
|
||||
unsigned char continuation;
|
||||
unsigned short msg_count;
|
||||
/*
|
||||
* short msg_len[msg_count];
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
/*
|
||||
* data for messages
|
||||
*/
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* Maximum packet size for totem pg messages
|
||||
@ -189,12 +189,12 @@ DECLARE_LIST_INIT(assembly_list_free);
|
||||
|
||||
/*
|
||||
* Staging buffer for packed messages. Messages are staged in this buffer
|
||||
* before sending. Multiple messages may fit which cuts down on the
|
||||
* number of mcasts sent. If a message doesn't completely fit, then
|
||||
* the mcast header has a fragment bit set that says that there are more
|
||||
* before sending. Multiple messages may fit which cuts down on the
|
||||
* number of mcasts sent. If a message doesn't completely fit, then
|
||||
* the mcast header has a fragment bit set that says that there are more
|
||||
* data to follow. fragment_size is an index into the buffer. It indicates
|
||||
* the size of message data and where to place new message data.
|
||||
* fragment_contuation indicates whether the first packed message in
|
||||
* the size of message data and where to place new message data.
|
||||
* fragment_contuation indicates whether the first packed message in
|
||||
* the buffer is a continuation of a previously packed fragment.
|
||||
*/
|
||||
static unsigned char *fragmentation_data;
|
||||
@ -256,7 +256,7 @@ static struct assembly *assembly_ref (unsigned int nodeid)
|
||||
*/
|
||||
for (list = assembly_list_inuse.next;
|
||||
list != &assembly_list_inuse;
|
||||
list = list->next) {
|
||||
list = list->next) {
|
||||
|
||||
assembly = list_entry (list, struct assembly, list);
|
||||
|
||||
@ -381,7 +381,7 @@ static inline int group_matches (
|
||||
int i;
|
||||
int j;
|
||||
struct iovec iovec_aligned = { NULL, 0 };
|
||||
|
||||
|
||||
assert (iov_len == 1);
|
||||
|
||||
/*
|
||||
@ -422,7 +422,7 @@ static inline int group_matches (
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static inline void app_deliver_fn (
|
||||
unsigned int nodeid,
|
||||
@ -525,8 +525,8 @@ static void totempg_deliver_fn (
|
||||
* assemble the packet contents into one block of data to simplify delivery
|
||||
*/
|
||||
if (iov_len == 1) {
|
||||
/*
|
||||
* This message originated from external processor
|
||||
/*
|
||||
* This message originated from external processor
|
||||
* because there is only one iovec for the full msg.
|
||||
*/
|
||||
char *data;
|
||||
@ -540,7 +540,7 @@ static void totempg_deliver_fn (
|
||||
msg_count = mcast->msg_count;
|
||||
datasize = sizeof (struct totempg_mcast) +
|
||||
msg_count * sizeof (unsigned short);
|
||||
|
||||
|
||||
memcpy (header, iovec[0].iov_base, datasize);
|
||||
assert(iovec);
|
||||
data = iovec[0].iov_base;
|
||||
@ -555,8 +555,8 @@ static void totempg_deliver_fn (
|
||||
memcpy (&assembly->data[assembly->index], &data[datasize],
|
||||
iovec[0].iov_len - datasize);
|
||||
} else {
|
||||
/*
|
||||
* The message originated from local processor
|
||||
/*
|
||||
* The message originated from local processor
|
||||
* becasue there is greater than one iovec for then full msg.
|
||||
*/
|
||||
h_index = 0;
|
||||
@ -582,7 +582,7 @@ static void totempg_deliver_fn (
|
||||
/*
|
||||
* If the last message in the buffer is a fragment, then we
|
||||
* can't deliver it. We'll first deliver the full messages
|
||||
* then adjust the assembly buffer so we can add the rest of the
|
||||
* then adjust the assembly buffer so we can add the rest of the
|
||||
* fragment when it arrives.
|
||||
*/
|
||||
msg_count = mcast->fragmented ? mcast->msg_count - 1 : mcast->msg_count;
|
||||
@ -596,7 +596,7 @@ static void totempg_deliver_fn (
|
||||
* Also, if the first packed message is a continuation
|
||||
* of a previous message, but the assembly buffer
|
||||
* is empty, then we need to discard it since we can't
|
||||
* assemble a complete message. Likewise, if this message isn't a
|
||||
* assemble a complete message. Likewise, if this message isn't a
|
||||
* continuation and the assembly buffer is empty, we have to discard
|
||||
* the continued message.
|
||||
*/
|
||||
@ -612,7 +612,7 @@ static void totempg_deliver_fn (
|
||||
iov_delv.iov_len = msg_lens[1];
|
||||
start = 1;
|
||||
}
|
||||
} else
|
||||
} else
|
||||
if (assembly->throw_away_mode == THROW_AWAY_INACTIVE) {
|
||||
if (continuation == assembly->last_frag_num) {
|
||||
assembly->last_frag_num = mcast->fragmented;
|
||||
@ -731,7 +731,7 @@ int totempg_initialize (
|
||||
totempg_confchg_fn);
|
||||
|
||||
totemmrp_callback_token_create (
|
||||
&callback_token_received_handle,
|
||||
&callback_token_received_handle,
|
||||
TOTEM_CALLBACK_TOKEN_RECEIVED,
|
||||
0,
|
||||
callback_token_received_fn,
|
||||
@ -764,7 +764,7 @@ static int mcast_msg (
|
||||
int i;
|
||||
int dest, src;
|
||||
int max_packet_size = 0;
|
||||
int copy_len = 0;
|
||||
int copy_len = 0;
|
||||
int copy_base = 0;
|
||||
int total_size = 0;
|
||||
|
||||
@ -813,7 +813,7 @@ static int mcast_msg (
|
||||
* fragment_buffer on exit so that max_packet_size + fragment_size
|
||||
* doesn't exceed the size of the fragment_buffer on the next call.
|
||||
*/
|
||||
if ((copy_len + fragment_size) <
|
||||
if ((copy_len + fragment_size) <
|
||||
(max_packet_size - sizeof (unsigned short))) {
|
||||
|
||||
memcpy (&fragmentation_data[fragment_size],
|
||||
@ -850,7 +850,7 @@ static int mcast_msg (
|
||||
* fit, then indicate a fragment. This also means that the next
|
||||
* message will have the continuation of this one.
|
||||
*/
|
||||
if ((i < (iov_len - 1)) ||
|
||||
if ((i < (iov_len - 1)) ||
|
||||
((copy_base + copy_len) < iovec[i].iov_len)) {
|
||||
if (!next_fragment) {
|
||||
next_fragment++;
|
||||
@ -870,7 +870,7 @@ static int mcast_msg (
|
||||
iovecs[0].iov_base = &mcast;
|
||||
iovecs[0].iov_len = sizeof(struct totempg_mcast);
|
||||
iovecs[1].iov_base = mcast_packed_msg_lens;
|
||||
iovecs[1].iov_len = mcast_packed_msg_count *
|
||||
iovecs[1].iov_len = mcast_packed_msg_count *
|
||||
sizeof(unsigned short);
|
||||
iovecs[2].iov_base = data_ptr;
|
||||
iovecs[2].iov_len = max_packet_size;
|
||||
@ -892,7 +892,7 @@ static int mcast_msg (
|
||||
copy_len = 0;
|
||||
copy_base = 0;
|
||||
i++;
|
||||
|
||||
|
||||
/*
|
||||
* Continue with the rest of the current iovec.
|
||||
*/
|
||||
@ -924,7 +924,7 @@ static int msg_count_send_ok (
|
||||
int avail = 0;
|
||||
|
||||
avail = totemmrp_avail () - totempg_reserved - 1;
|
||||
|
||||
|
||||
return (avail > msg_count);
|
||||
}
|
||||
|
||||
@ -936,7 +936,7 @@ static int byte_count_send_ok (
|
||||
|
||||
avail = totemmrp_avail () - 1;
|
||||
|
||||
msg_count = (byte_count / (totempg_totem_config->net_mtu - 25)) + 1;
|
||||
msg_count = (byte_count / (totempg_totem_config->net_mtu - 25)) + 1;
|
||||
|
||||
return (avail > msg_count);
|
||||
}
|
||||
@ -946,7 +946,7 @@ static int send_reserve (
|
||||
{
|
||||
unsigned int msg_count = 0;
|
||||
|
||||
msg_count = (msg_size / (totempg_totem_config->net_mtu - 25)) + 1;
|
||||
msg_count = (msg_size / (totempg_totem_config->net_mtu - 25)) + 1;
|
||||
totempg_reserved += msg_count;
|
||||
|
||||
return (msg_count);
|
||||
@ -1062,7 +1062,7 @@ int totempg_groups_join (
|
||||
res = ENOMEM;
|
||||
goto error_exit;
|
||||
}
|
||||
memcpy (&new_groups[instance->groups_cnt],
|
||||
memcpy (&new_groups[instance->groups_cnt],
|
||||
groups, group_cnt * sizeof (struct totempg_group));
|
||||
instance->groups = new_groups;
|
||||
instance->groups_cnt = instance->groups_cnt = group_cnt;
|
||||
@ -1269,7 +1269,7 @@ int totempg_groups_send_ok_groups (
|
||||
}
|
||||
|
||||
res = msg_count_send_ok (size);
|
||||
|
||||
|
||||
hdb_handle_put (&totempg_groups_instance_database, handle);
|
||||
error_exit:
|
||||
pthread_mutex_unlock (&totempg_mutex);
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -140,7 +140,7 @@ struct rrp_algo {
|
||||
void (*token_send) (
|
||||
struct totemrrp_instance *instance,
|
||||
const struct iovec *iovec,
|
||||
unsigned int iov_len);
|
||||
unsigned int iov_len);
|
||||
|
||||
void (*recv_flush) (
|
||||
struct totemrrp_instance *instance);
|
||||
@ -172,7 +172,7 @@ struct totemrrp_instance {
|
||||
struct rrp_algo *rrp_algo;
|
||||
|
||||
void *context;
|
||||
|
||||
|
||||
char *status[INTERFACE_MAX];
|
||||
|
||||
void (*totemrrp_deliver_fn) (
|
||||
@ -257,7 +257,7 @@ static void none_token_recv (
|
||||
static void none_token_send (
|
||||
struct totemrrp_instance *instance,
|
||||
const struct iovec *iovec,
|
||||
unsigned int iov_len);
|
||||
unsigned int iov_len);
|
||||
|
||||
static void none_recv_flush (
|
||||
struct totemrrp_instance *instance);
|
||||
@ -315,7 +315,7 @@ static void passive_token_recv (
|
||||
static void passive_token_send (
|
||||
struct totemrrp_instance *instance,
|
||||
const struct iovec *iovec,
|
||||
unsigned int iov_len);
|
||||
unsigned int iov_len);
|
||||
|
||||
static void passive_recv_flush (
|
||||
struct totemrrp_instance *instance);
|
||||
@ -373,7 +373,7 @@ static void active_token_recv (
|
||||
static void active_token_send (
|
||||
struct totemrrp_instance *instance,
|
||||
const struct iovec *iovec,
|
||||
unsigned int iov_len);
|
||||
unsigned int iov_len);
|
||||
|
||||
static void active_recv_flush (
|
||||
struct totemrrp_instance *instance);
|
||||
@ -723,10 +723,10 @@ static void passive_mcast_recv (
|
||||
|
||||
for (i = 0; i < rrp_instance->interface_count; i++) {
|
||||
if ((passive_instance->faulty[i] == 0) &&
|
||||
(max - passive_instance->mcast_recv_count[i] >
|
||||
(max - passive_instance->mcast_recv_count[i] >
|
||||
rrp_instance->totem_config->rrp_problem_count_threshold)) {
|
||||
passive_instance->faulty[i] = 1;
|
||||
sprintf (rrp_instance->status[i],
|
||||
sprintf (rrp_instance->status[i],
|
||||
"Marking ringid %u interface %s FAULTY - adminisrtative intervention required.",
|
||||
i,
|
||||
totemnet_iface_print (rrp_instance->net_handles[i]));
|
||||
@ -748,7 +748,7 @@ static void passive_mcast_flush_send (
|
||||
do {
|
||||
passive_instance->msg_xmit_iface = (passive_instance->msg_xmit_iface + 1) % instance->interface_count;
|
||||
} while (passive_instance->faulty[passive_instance->msg_xmit_iface] == 1);
|
||||
|
||||
|
||||
totemnet_mcast_flush_send (instance->net_handles[passive_instance->msg_xmit_iface], iovec, iov_len);
|
||||
}
|
||||
|
||||
@ -762,8 +762,8 @@ static void passive_mcast_noflush_send (
|
||||
do {
|
||||
passive_instance->msg_xmit_iface = (passive_instance->msg_xmit_iface + 1) % instance->interface_count;
|
||||
} while (passive_instance->faulty[passive_instance->msg_xmit_iface] == 1);
|
||||
|
||||
|
||||
|
||||
|
||||
totemnet_mcast_noflush_send (instance->net_handles[passive_instance->msg_xmit_iface], iovec, iov_len);
|
||||
}
|
||||
|
||||
@ -806,10 +806,10 @@ static void passive_token_recv (
|
||||
|
||||
for (i = 0; i < rrp_instance->interface_count; i++) {
|
||||
if ((passive_instance->faulty[i] == 0) &&
|
||||
(max - passive_instance->token_recv_count[i] >
|
||||
(max - passive_instance->token_recv_count[i] >
|
||||
rrp_instance->totem_config->rrp_problem_count_threshold)) {
|
||||
passive_instance->faulty[i] = 1;
|
||||
sprintf (rrp_instance->status[i],
|
||||
sprintf (rrp_instance->status[i],
|
||||
"Marking seqid %d ringid %u interface %s FAULTY - adminisrtative intervention required.",
|
||||
token_seq,
|
||||
i,
|
||||
@ -832,7 +832,7 @@ static void passive_token_send (
|
||||
do {
|
||||
passive_instance->token_xmit_iface = (passive_instance->token_xmit_iface + 1) % instance->interface_count;
|
||||
} while (passive_instance->faulty[passive_instance->token_xmit_iface] == 1);
|
||||
|
||||
|
||||
totemnet_token_send (
|
||||
instance->net_handles[passive_instance->token_xmit_iface],
|
||||
iovec, iov_len);
|
||||
@ -972,16 +972,16 @@ static void timer_function_active_problem_decrementer (void *context)
|
||||
struct totemrrp_instance *rrp_instance = active_instance->rrp_instance;
|
||||
unsigned int problem_found = 0;
|
||||
unsigned int i;
|
||||
|
||||
|
||||
for (i = 0; i < rrp_instance->interface_count; i++) {
|
||||
if (active_instance->counter_problems[i] > 0) {
|
||||
problem_found = 1;
|
||||
active_instance->counter_problems[i] -= 1;
|
||||
if (active_instance->counter_problems[i] == 0) {
|
||||
sprintf (rrp_instance->status[i],
|
||||
sprintf (rrp_instance->status[i],
|
||||
"ring %d active with no faults", i);
|
||||
} else {
|
||||
sprintf (rrp_instance->status[i],
|
||||
sprintf (rrp_instance->status[i],
|
||||
"Decrementing problem counter for iface %s to [%d of %d]",
|
||||
totemnet_iface_print (rrp_instance->net_handles[i]),
|
||||
active_instance->counter_problems[i],
|
||||
@ -1013,7 +1013,7 @@ static void timer_function_active_token_expired (void *context)
|
||||
if (active_instance->timer_problem_decrementer == 0) {
|
||||
active_timer_problem_decrementer_start (active_instance);
|
||||
}
|
||||
sprintf (rrp_instance->status[i],
|
||||
sprintf (rrp_instance->status[i],
|
||||
"Incrementing problem counter for seqid %d iface %s to [%d of %d]",
|
||||
active_instance->last_token_seq,
|
||||
totemnet_iface_print (rrp_instance->net_handles[i]),
|
||||
@ -1029,7 +1029,7 @@ static void timer_function_active_token_expired (void *context)
|
||||
if (active_instance->counter_problems[i] >= rrp_instance->totem_config->rrp_problem_count_threshold)
|
||||
{
|
||||
active_instance->faulty[i] = 1;
|
||||
sprintf (rrp_instance->status[i],
|
||||
sprintf (rrp_instance->status[i],
|
||||
"Marking seqid %d ringid %u interface %s FAULTY - adminisrtative intervention required.",
|
||||
active_instance->last_token_seq,
|
||||
i,
|
||||
@ -1323,7 +1323,7 @@ void rrp_deliver_fn (
|
||||
|
||||
if (token_is) {
|
||||
/*
|
||||
* Deliver to the token receiver for this rrp algorithm
|
||||
* Deliver to the token receiver for this rrp algorithm
|
||||
*/
|
||||
deliver_fn_context->instance->rrp_algo->token_recv (
|
||||
deliver_fn_context->instance,
|
||||
@ -1334,7 +1334,7 @@ void rrp_deliver_fn (
|
||||
token_seqid);
|
||||
} else {
|
||||
/*
|
||||
* Deliver to the mcast receiver for this rrp algorithm
|
||||
* Deliver to the mcast receiver for this rrp algorithm
|
||||
*/
|
||||
deliver_fn_context->instance->rrp_algo->mcast_recv (
|
||||
deliver_fn_context->instance,
|
||||
@ -1578,7 +1578,7 @@ int totemrrp_send_flush (hdb_handle_t handle)
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
instance->rrp_algo->send_flush (instance);
|
||||
|
||||
hdb_handle_put (&totemrrp_instance_database, handle);
|
||||
@ -1624,7 +1624,7 @@ int totemrrp_mcast_flush_send (
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
// TODO this needs to return the result
|
||||
instance->rrp_algo->mcast_flush_send (instance, iovec, iov_len);
|
||||
|
||||
@ -1647,7 +1647,7 @@ int totemrrp_mcast_noflush_send (
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* merge detects go out through mcast_flush_send so it is safe to
|
||||
* flush these messages if we are only one processor. This avoids
|
||||
@ -1675,7 +1675,7 @@ int totemrrp_iface_check (hdb_handle_t handle)
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
instance->rrp_algo->iface_check (instance);
|
||||
|
||||
hdb_handle_put (&totemrrp_instance_database, handle);
|
||||
@ -1697,9 +1697,9 @@ int totemrrp_ifaces_get (
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
*status = instance->status;
|
||||
|
||||
|
||||
if (iface_count) {
|
||||
*iface_count = instance->interface_count;
|
||||
}
|
||||
@ -1724,7 +1724,7 @@ printf ("totemrrp ring reenable\n");
|
||||
res = ENOENT;
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
instance->rrp_algo->ring_reenable (instance);
|
||||
|
||||
for (i = 0; i < instance->interface_count; i++) {
|
||||
|
108
exec/totemsrp.c
108
exec/totemsrp.c
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -35,7 +35,7 @@
|
||||
|
||||
/*
|
||||
* The first version of this code was based upon Yair Amir's PhD thesis:
|
||||
* http://www.cs.jhu.edu/~yairamir/phd.ps) (ch4,5).
|
||||
* http://www.cs.jhu.edu/~yairamir/phd.ps) (ch4,5).
|
||||
*
|
||||
* The current version of totemsrp implements the Totem protocol specified in:
|
||||
* http://citeseer.ist.psu.edu/amir95totem.html
|
||||
@ -87,7 +87,7 @@
|
||||
#define QUEUE_RTR_ITEMS_SIZE_MAX 256 /* allow 256 retransmit items */
|
||||
#define RETRANS_MESSAGE_QUEUE_SIZE_MAX 500 /* allow 500 messages to be queued */
|
||||
#define RECEIVED_MESSAGE_QUEUE_SIZE_MAX 500 /* allow 500 messages to be queued */
|
||||
#define MAXIOVS 5
|
||||
#define MAXIOVS 5
|
||||
#define RETRANSMIT_ENTRIES_MAX 30
|
||||
#define TOKEN_SIZE_MAX 64000 /* bytes */
|
||||
|
||||
@ -110,7 +110,7 @@
|
||||
|
||||
/*
|
||||
* These can be used ot test different rollover points
|
||||
* #define SEQNO_START_MSG 0xfffffe00
|
||||
* #define SEQNO_START_MSG 0xfffffe00
|
||||
* #define SEQNO_START_TOKEN 0xfffffe00
|
||||
*/
|
||||
|
||||
@ -144,7 +144,7 @@ enum encapsulation_type {
|
||||
MESSAGE_NOT_ENCAPSULATED = 2
|
||||
};
|
||||
|
||||
/*
|
||||
/*
|
||||
* New membership algorithm local variables
|
||||
*/
|
||||
struct srp_addr {
|
||||
@ -213,7 +213,7 @@ struct orf_token {
|
||||
unsigned int token_seq;
|
||||
unsigned int aru;
|
||||
unsigned int aru_addr;
|
||||
struct memb_ring_id ring_id;
|
||||
struct memb_ring_id ring_id;
|
||||
unsigned int backlog;
|
||||
unsigned int fcc;
|
||||
int retrans_flg;
|
||||
@ -236,7 +236,7 @@ struct memb_join {
|
||||
*/
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
|
||||
struct memb_merge_detect {
|
||||
struct message_header header;
|
||||
struct srp_addr system_from;
|
||||
@ -368,7 +368,7 @@ struct totemsrp_instance {
|
||||
int my_retrans_flg_count;
|
||||
|
||||
unsigned int my_high_ring_delivered;
|
||||
|
||||
|
||||
int heartbeat_timeout;
|
||||
|
||||
/*
|
||||
@ -433,7 +433,7 @@ struct totemsrp_instance {
|
||||
|
||||
int totemsrp_subsys_id;
|
||||
|
||||
void (*totemsrp_log_printf) (int subsys,
|
||||
void (*totemsrp_log_printf) (int subsys,
|
||||
const char *function, const char *file,
|
||||
int line, unsigned int level,
|
||||
const char *format, ...)__attribute__((format(printf, 6, 7)));;
|
||||
@ -718,7 +718,7 @@ int totemsrp_initialize (
|
||||
if (rundir == NULL) {
|
||||
rundir = LOCALSTATEDIR "/lib/corosync";
|
||||
}
|
||||
|
||||
|
||||
res = mkdir (rundir, 0700);
|
||||
if (res == -1 && errno != EEXIST) {
|
||||
goto error_put;
|
||||
@ -820,13 +820,13 @@ int totemsrp_initialize (
|
||||
}
|
||||
|
||||
if (instance->use_heartbeat) {
|
||||
instance->heartbeat_timeout
|
||||
= (totem_config->heartbeat_failures_allowed) * totem_config->token_retransmit_timeout
|
||||
instance->heartbeat_timeout
|
||||
= (totem_config->heartbeat_failures_allowed) * totem_config->token_retransmit_timeout
|
||||
+ totem_config->max_network_delay;
|
||||
|
||||
if (instance->heartbeat_timeout >= totem_config->token_timeout) {
|
||||
log_printf (instance->totemsrp_log_level_notice,
|
||||
"total heartbeat_timeout (%d ms) is not less than token timeout (%d ms)\n",
|
||||
"total heartbeat_timeout (%d ms) is not less than token timeout (%d ms)\n",
|
||||
instance->heartbeat_timeout,
|
||||
totem_config->token_timeout);
|
||||
log_printf (instance->totemsrp_log_level_notice,
|
||||
@ -840,7 +840,7 @@ int totemsrp_initialize (
|
||||
"total heartbeat_timeout (%d ms)\n", instance->heartbeat_timeout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
totemrrp_initialize (
|
||||
poll_handle,
|
||||
&instance->totemrrp_handle,
|
||||
@ -918,7 +918,7 @@ int totemsrp_ifaces_get (
|
||||
*iface_count = instance->totem_config->interface_count;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < instance->my_left_memb_entries; i++) {
|
||||
if (instance->my_left_memb_list[i].addr[0].nodeid == nodeid) {
|
||||
found = 1;
|
||||
@ -1236,7 +1236,7 @@ static void memb_set_merge (
|
||||
if (srp_addr_equal (&fullset[j], &subset[i])) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found == 0) {
|
||||
srp_addr_copy (&fullset[*fullset_entries], &subset[i]);
|
||||
@ -1476,7 +1476,7 @@ static void timer_function_orf_token_timeout (void *data)
|
||||
"The token was lost in the COMMIT state.\n");
|
||||
memb_state_gather_enter (instance, 4);
|
||||
break;
|
||||
|
||||
|
||||
case MEMB_STATE_RECOVERY:
|
||||
log_printf (instance->totemsrp_log_level_notice,
|
||||
"The token was lost in the RECOVERY state.\n");
|
||||
@ -1511,7 +1511,7 @@ static void memb_timer_function_state_gather (void *data)
|
||||
* Restart the join timeout
|
||||
`*/
|
||||
poll_timer_delete (instance->totemsrp_poll_handle, instance->memb_timer_state_gather_join_timeout);
|
||||
|
||||
|
||||
poll_timer_add (instance->totemsrp_poll_handle,
|
||||
instance->totem_config->join_timeout,
|
||||
(void *)instance,
|
||||
@ -1675,7 +1675,7 @@ static void memb_state_operational_enter (struct totemsrp_instance *instance)
|
||||
trans_memb_list_totemip, instance->my_trans_memb_entries,
|
||||
left_list, instance->my_left_memb_entries,
|
||||
0, 0, &instance->my_ring_id);
|
||||
|
||||
|
||||
// TODO we need to filter to ensure we only deliver those
|
||||
// messages which are part of instance->my_deliver_memb
|
||||
messages_deliver_to_app (instance, 1, instance->old_ring_state_high_seq_received);
|
||||
@ -1790,7 +1790,7 @@ static void memb_state_commit_enter (
|
||||
{
|
||||
ring_save (instance);
|
||||
|
||||
old_ring_state_save (instance);
|
||||
old_ring_state_save (instance);
|
||||
|
||||
memb_state_commit_token_update (instance, commit_token);
|
||||
|
||||
@ -1947,7 +1947,7 @@ static void memb_state_recovery_enter (
|
||||
low_ring_aru + 1, instance->old_ring_state_high_seq_received);
|
||||
strcpy (not_originated, "Not Originated for recovery: ");
|
||||
strcpy (is_originated, "Originated for recovery: ");
|
||||
|
||||
|
||||
for (i = 1; i <= range; i++) {
|
||||
struct sort_queue_item *sort_queue_item;
|
||||
struct message_item message_item;
|
||||
@ -2046,7 +2046,7 @@ int totemsrp_mcast (
|
||||
if (res != 0) {
|
||||
goto error_exit;
|
||||
}
|
||||
|
||||
|
||||
if (queue_is_full (&instance->new_message_queue)) {
|
||||
log_printf (instance->totemsrp_log_level_warning, "queue full\n");
|
||||
return (-1);
|
||||
@ -2104,7 +2104,7 @@ error_iovec:
|
||||
for (j = 0; j < i; j++) {
|
||||
free (message_item.iovec[j].iov_base);
|
||||
}
|
||||
|
||||
|
||||
free(message_item.mcast);
|
||||
|
||||
error_mcast:
|
||||
@ -2142,7 +2142,7 @@ error_exit:
|
||||
/*
|
||||
* ORF Token Management
|
||||
*/
|
||||
/*
|
||||
/*
|
||||
* Recast message to mcast group if it is available
|
||||
*/
|
||||
static int orf_token_remcast (
|
||||
@ -2166,7 +2166,7 @@ static int orf_token_remcast (
|
||||
log_printf (instance->totemsrp_log_level_debug, "sq not in range\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get RTR item at seq, if not available, return
|
||||
*/
|
||||
@ -2330,9 +2330,9 @@ static int orf_token_mcast (
|
||||
memset (&sort_queue_item, 0, sizeof (struct sort_queue_item));
|
||||
sort_queue_item.iovec[0].iov_base = message_item->mcast;
|
||||
sort_queue_item.iovec[0].iov_len = sizeof (struct mcast);
|
||||
|
||||
|
||||
mcast = sort_queue_item.iovec[0].iov_base;
|
||||
|
||||
|
||||
memcpy (&sort_queue_item.iovec[1], message_item->iovec,
|
||||
message_item->iov_len * sizeof (struct iovec));
|
||||
|
||||
@ -2351,7 +2351,7 @@ static int orf_token_mcast (
|
||||
totemrrp_mcast_noflush_send (instance->totemrrp_handle,
|
||||
sort_queue_item_ptr->iovec,
|
||||
sort_queue_item_ptr->iov_len);
|
||||
|
||||
|
||||
/*
|
||||
* Delete item from pending queue
|
||||
*/
|
||||
@ -2397,7 +2397,7 @@ static int orf_token_rtr (
|
||||
}
|
||||
|
||||
rtr_list = &orf_token->rtr_list[0];
|
||||
|
||||
|
||||
strcpy (retransmit_msg, "Retransmit List: ");
|
||||
if (orf_token->rtr_list_entries) {
|
||||
log_printf (instance->totemsrp_log_level_debug,
|
||||
@ -2649,7 +2649,7 @@ static int orf_token_send_initial (struct totemsrp_instance *instance)
|
||||
orf_token.retrans_flg = 1;
|
||||
instance->my_set_retrans_flg = 1;
|
||||
}
|
||||
|
||||
|
||||
orf_token.aru = 0;
|
||||
orf_token.aru = SEQNO_START_MSG - 1;
|
||||
orf_token.aru_addr = instance->my_id.addr[0].nodeid;
|
||||
@ -2800,7 +2800,7 @@ static int memb_lowest_in_config (struct totemsrp_instance *instance)
|
||||
/*
|
||||
* find representative by searching for smallest identifier
|
||||
*/
|
||||
|
||||
|
||||
lowest_addr = &token_memb[0].addr[0];
|
||||
for (i = 1; i < token_memb_entries; i++) {
|
||||
if (totemip_compare(lowest_addr, &token_memb[i].addr[0]) > 0) {
|
||||
@ -2881,7 +2881,7 @@ static void memb_join_message_send (struct totemsrp_instance *instance)
|
||||
memb_join.proc_list_entries = instance->my_proc_list_entries;
|
||||
memb_join.failed_list_entries = instance->my_failed_list_entries;
|
||||
srp_addr_copy (&memb_join.system_from, &instance->my_id);
|
||||
|
||||
|
||||
iovec[0].iov_base = &memb_join;
|
||||
iovec[0].iov_len = sizeof (struct memb_join);
|
||||
iovec[1].iov_base = &instance->my_proc_list;
|
||||
@ -2906,7 +2906,7 @@ static void memb_join_message_send (struct totemsrp_instance *instance)
|
||||
iovs);
|
||||
}
|
||||
|
||||
static void memb_merge_detect_transmit (struct totemsrp_instance *instance)
|
||||
static void memb_merge_detect_transmit (struct totemsrp_instance *instance)
|
||||
{
|
||||
struct memb_merge_detect memb_merge_detect;
|
||||
struct iovec iovec[2];
|
||||
@ -2958,7 +2958,7 @@ static void memb_ring_id_create_or_load (
|
||||
log_printf (instance->totemsrp_log_level_warning,
|
||||
"Couldn't open %s %s\n", filename, strerror (errno));
|
||||
}
|
||||
|
||||
|
||||
totemip_copy(&memb_ring_id->rep, &instance->my_id.addr[0]);
|
||||
assert (!totemip_zero_check(&memb_ring_id->rep));
|
||||
instance->token_ring_id_seq = memb_ring_id->seq;
|
||||
@ -3075,7 +3075,7 @@ static void token_callbacks_execute (
|
||||
default:
|
||||
assert (0);
|
||||
}
|
||||
|
||||
|
||||
for (list = callback_listhead->next; list != callback_listhead;
|
||||
list = list_next) {
|
||||
|
||||
@ -3279,7 +3279,7 @@ static int message_handler_orf_token (
|
||||
forward_token = 1;
|
||||
if (totemip_equal(&instance->my_ring_id.rep, &instance->my_id.addr[0])) {
|
||||
if (instance->my_token_held) {
|
||||
forward_token = 0;
|
||||
forward_token = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3310,7 +3310,7 @@ static int message_handler_orf_token (
|
||||
if ((forward_token)
|
||||
&& instance->use_heartbeat) {
|
||||
reset_heartbeat_timeout(instance);
|
||||
}
|
||||
}
|
||||
else {
|
||||
cancel_heartbeat_timeout(instance);
|
||||
}
|
||||
@ -3340,7 +3340,7 @@ static int message_handler_orf_token (
|
||||
}
|
||||
|
||||
return (0); /* discard token */
|
||||
}
|
||||
}
|
||||
|
||||
transmits_allowed = fcc_calculate (instance, token);
|
||||
mcasted_retransmit = orf_token_rtr (instance, token, &transmits_allowed);
|
||||
@ -3349,11 +3349,11 @@ static int message_handler_orf_token (
|
||||
mcasted_regular = orf_token_mcast (instance, token, transmits_allowed);
|
||||
fcc_token_update (instance, token, mcasted_retransmit +
|
||||
mcasted_regular);
|
||||
|
||||
|
||||
if (sq_lt_compare (instance->my_aru, token->aru) ||
|
||||
instance->my_id.addr[0].nodeid == token->aru_addr ||
|
||||
token->aru_addr == 0) {
|
||||
|
||||
|
||||
token->aru = instance->my_aru;
|
||||
if (token->aru == token->seq) {
|
||||
token->aru_addr = 0;
|
||||
@ -3369,7 +3369,7 @@ static int message_handler_orf_token (
|
||||
|
||||
if (instance->my_aru_count > instance->totem_config->fail_to_recv_const &&
|
||||
token->aru_addr != instance->my_id.addr[0].nodeid) {
|
||||
|
||||
|
||||
log_printf (instance->totemsrp_log_level_error,
|
||||
"FAILED TO RECEIVE\n");
|
||||
// TODO if we fail to receive, it may be possible to end with a gather
|
||||
@ -3404,11 +3404,11 @@ static int message_handler_orf_token (
|
||||
token->retrans_flg = 0;
|
||||
}
|
||||
log_printf (instance->totemsrp_log_level_debug,
|
||||
"token retrans flag is %d my set retrans flag%d retrans queue empty %d count %d, aru %x\n",
|
||||
"token retrans flag is %d my set retrans flag%d retrans queue empty %d count %d, aru %x\n",
|
||||
token->retrans_flg, instance->my_set_retrans_flg,
|
||||
queue_is_empty (&instance->retrans_message_queue),
|
||||
instance->my_retrans_flg_count, token->aru);
|
||||
if (token->retrans_flg == 0) {
|
||||
if (token->retrans_flg == 0) {
|
||||
instance->my_retrans_flg_count += 1;
|
||||
} else {
|
||||
instance->my_retrans_flg_count = 0;
|
||||
@ -3444,9 +3444,9 @@ static int message_handler_orf_token (
|
||||
instance->my_retrans_flg_count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
totemrrp_send_flush (instance->totemrrp_handle);
|
||||
token_send (instance, token, forward_token);
|
||||
token_send (instance, token, forward_token);
|
||||
|
||||
#ifdef GIVEINFO
|
||||
gettimeofday (&tv_current, NULL);
|
||||
@ -3619,7 +3619,7 @@ static int message_handler_mcast (
|
||||
struct sort_queue_item sort_queue_item;
|
||||
struct sq *sort_queue;
|
||||
struct mcast mcast_header;
|
||||
|
||||
|
||||
|
||||
if (endian_conversion_needed) {
|
||||
mcast_endian_convert (msg, &mcast_header);
|
||||
@ -3698,7 +3698,7 @@ static int message_handler_mcast (
|
||||
* otherwise free io vectors
|
||||
*/
|
||||
if (msg_len > 0 && msg_len < FRAME_SIZE_MAX &&
|
||||
sq_in_range (sort_queue, mcast_header.seq) &&
|
||||
sq_in_range (sort_queue, mcast_header.seq) &&
|
||||
sq_item_inuse (sort_queue, mcast_header.seq) == 0) {
|
||||
|
||||
/*
|
||||
@ -3714,7 +3714,7 @@ static int message_handler_mcast (
|
||||
assert (sort_queue_item.iovec[0].iov_len > 0);
|
||||
assert (sort_queue_item.iovec[0].iov_len < FRAME_SIZE_MAX);
|
||||
sort_queue_item.iov_len = 1;
|
||||
|
||||
|
||||
if (sq_lt_compare (instance->my_high_seq_received,
|
||||
mcast_header.seq)) {
|
||||
instance->my_high_seq_received = mcast_header.seq;
|
||||
@ -3816,12 +3816,12 @@ static int memb_join_process (
|
||||
instance->my_failed_list_entries)) {
|
||||
|
||||
memb_consensus_set (instance, &memb_join->system_from);
|
||||
|
||||
|
||||
if (memb_consensus_agreed (instance) &&
|
||||
memb_lowest_in_config (instance)) {
|
||||
|
||||
memb_state_commit_token_create (instance, my_commit_token);
|
||||
|
||||
|
||||
memb_state_commit_enter (instance, my_commit_token);
|
||||
} else {
|
||||
return (0);
|
||||
@ -4019,7 +4019,7 @@ static int message_handler_memb_join (
|
||||
case MEMB_STATE_GATHER:
|
||||
memb_join_process (instance, memb_join);
|
||||
break;
|
||||
|
||||
|
||||
case MEMB_STATE_COMMIT:
|
||||
if (memb_set_subset (&memb_join->system_from,
|
||||
1,
|
||||
@ -4091,7 +4091,7 @@ static int message_handler_memb_commit_token (
|
||||
memb_set_subtract (sub, &sub_entries,
|
||||
instance->my_proc_list, instance->my_proc_list_entries,
|
||||
instance->my_failed_list, instance->my_failed_list_entries);
|
||||
|
||||
|
||||
if (memb_set_equal (addr,
|
||||
memb_commit_token->addr_entries,
|
||||
sub,
|
||||
@ -4165,12 +4165,12 @@ void main_deliver_fn (
|
||||
(unsigned int)msg_len);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ((int)message_header->type >= totemsrp_message_handlers.count) {
|
||||
log_printf (instance->totemsrp_log_level_security, "Type of received message is wrong... ignoring %d.\n", (int)message_header->type);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Handle incoming message
|
||||
*/
|
||||
|
@ -8,7 +8,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com), Mark Haverkamp (markh@osdl.org)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -52,12 +52,12 @@ LOGSYS_DECLARE_SUBSYS ("MAIN");
|
||||
/*
|
||||
* Compare two names. returns non-zero on match.
|
||||
*/
|
||||
int name_match(cs_name_t *name1, cs_name_t *name2)
|
||||
int name_match(cs_name_t *name1, cs_name_t *name2)
|
||||
{
|
||||
if (name1->length == name2->length) {
|
||||
return ((strncmp ((char *)name1->value, (char *)name2->value,
|
||||
name1->length)) == 0);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -166,7 +166,7 @@ static int ykd_state_send_msg (const void *context)
|
||||
int res;
|
||||
|
||||
header.id = YKD_HEADER_SENDSTATE;
|
||||
|
||||
|
||||
iovec[0].iov_base = (char *)&header;
|
||||
iovec[0].iov_len = sizeof (struct ykd_header);
|
||||
iovec[1].iov_base = (char *)&ykd_state;
|
||||
@ -193,7 +193,7 @@ static int ykd_attempt_send_msg (const void *context)
|
||||
int res;
|
||||
|
||||
header.id = YKD_HEADER_SENDSTATE;
|
||||
|
||||
|
||||
iovec.iov_base = (char *)&header;
|
||||
iovec.iov_len = sizeof (struct ykd_header);
|
||||
|
||||
@ -297,7 +297,7 @@ static int decide (void)
|
||||
if (subquorum (view_list, view_list_entries, &ambiguous_sessions_max[i]) == 0) {
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
@ -327,7 +327,7 @@ static void ykd_state_endian_convert (struct ykd_state *state)
|
||||
for (i = 0; i < state->last_formed_entries; i++) {
|
||||
ykd_session_endian_convert (&state->last_formed[i]);
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < state->ambiguous_sessions_entries; i++) {
|
||||
ykd_session_endian_convert (&state->ambiguous_sessions[i]);
|
||||
}
|
||||
@ -343,7 +343,7 @@ static void ykd_deliver_fn (
|
||||
int state_position = 0;
|
||||
int i;
|
||||
char *msg_state = (char *)(iovec->iov_base) + sizeof (struct ykd_header);
|
||||
|
||||
|
||||
/*
|
||||
* If this is a localhost address, this node is always primary
|
||||
*/
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -35,7 +35,7 @@
|
||||
|
||||
/*
|
||||
* Add work to a work group and have threads process the work
|
||||
* Provide blocking for all work to complete
|
||||
* Provide blocking for all work to complete
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -1,13 +1,13 @@
|
||||
# Copyright (c) 2009 Red Hat, Inc.
|
||||
#
|
||||
#
|
||||
# Authors: Andrew Beekhof
|
||||
# Steven Dake (sdake@redhat.com)
|
||||
#
|
||||
# This software licensed under BSD license, the text of which follows:
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
@ -45,7 +45,7 @@ TOTEM_H = coropoll.h totem.h totemip.h totempg.h
|
||||
|
||||
EXTRA_DIST = $(noinst_HEADERS)
|
||||
|
||||
noinst_HEADERS = $(CS_INTERNAL_H:%=corosync/%)
|
||||
noinst_HEADERS = $(CS_INTERNAL_H:%=corosync/%)
|
||||
|
||||
nobase_include_HEADERS = $(CS_H:%=corosync/%) $(LCR_H:%=corosync/lcr/%) \
|
||||
$(ENGINE_H:%=corosync/engine/%) $(TOTEM_H:%=corosync/totem/%)
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Angus Salkeld (ahsalkeld@gmail.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Patrick Caulfield (pcaulfie@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -9,7 +9,7 @@
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -36,7 +36,7 @@
|
||||
#ifndef OBJDB_H_DEFINED
|
||||
#define OBJDB_H_DEFINED
|
||||
|
||||
#define OBJECT_PARENT_HANDLE 0xFFFFFFFF00000000ULL
|
||||
#define OBJECT_PARENT_HANDLE 0xFFFFFFFF00000000ULL
|
||||
|
||||
#include <stdio.h>
|
||||
#include <corosync/hdb.h>
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -267,7 +267,7 @@ static inline int hdb_handle_put (
|
||||
hdb_database_unlock (&handle_database->lock);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
handle_database->handles[handle].ref_count -= 1;
|
||||
assert (handle_database->handles[handle].ref_count >= 0);
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -106,7 +106,7 @@ static inline void swab_mar_req_header_t (mar_req_header_t *to_swab)
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
int size; __attribute__((aligned(8)))
|
||||
int size; __attribute__((aligned(8)))
|
||||
int id __attribute__((aligned(8)));
|
||||
cs_error_t error __attribute__((aligned(8)));
|
||||
} mar_res_header_t __attribute__((aligned(8)));
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (C) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -5,7 +5,7 @@
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
12
init/generic
12
init/generic
@ -31,7 +31,7 @@ internal_status() {
|
||||
}
|
||||
|
||||
status() {
|
||||
if
|
||||
if
|
||||
! internal_status
|
||||
then
|
||||
echo "Stopped"
|
||||
@ -44,7 +44,7 @@ status() {
|
||||
|
||||
start() {
|
||||
echo -n $"Starting Corosync Cluster Engine ($prog): "
|
||||
if
|
||||
if
|
||||
! internal_status
|
||||
then
|
||||
echo -n "starting... "
|
||||
@ -54,7 +54,7 @@ start() {
|
||||
|
||||
sleep 2 # give it time to fail... $? isn't definitive
|
||||
|
||||
if
|
||||
if
|
||||
internal_status
|
||||
then
|
||||
echo "OK"
|
||||
@ -91,7 +91,7 @@ stop() {
|
||||
echo -n "Escalating... "
|
||||
killall -KILL corosync
|
||||
sleep 5
|
||||
|
||||
|
||||
if
|
||||
! internal_status
|
||||
then
|
||||
@ -105,13 +105,13 @@ stop() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
while
|
||||
while
|
||||
internal_status
|
||||
do
|
||||
sleep 1
|
||||
echo -n "."
|
||||
done
|
||||
|
||||
|
||||
rm -f "$lockfile"
|
||||
echo "OK"
|
||||
return 0
|
||||
|
@ -1,21 +1,21 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# Application Interface Specification Startup
|
||||
# Application Interface Specification Startup
|
||||
# chkconfig: 2345 20 20
|
||||
|
||||
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||
|
||||
test -f /usr/sbin/corosync | exit 0
|
||||
|
||||
case "$1" in
|
||||
case "$1" in
|
||||
start)
|
||||
echo -n "Starting Corosync Cluster Engine: "
|
||||
echo -n "Starting Corosync Cluster Engine: "
|
||||
start-stop-daemon --start --quiet --exec /usr/sbin/corosync
|
||||
echo "."
|
||||
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping Corosync Cluster Engine: "
|
||||
echo -n "Stopping Corosync Cluster Engine: "
|
||||
start-stop-daemon --stop --quiet --exec /usr/sbin/corosync
|
||||
echo "."
|
||||
;;
|
||||
|
@ -1,13 +1,13 @@
|
||||
# Copyright (c) 2009 Red Hat, Inc.
|
||||
#
|
||||
#
|
||||
# Authors: Andrew Beekhof
|
||||
# Steven Dake (sdake@redhat.com)
|
||||
#
|
||||
# This software licensed under BSD license, the text of which follows:
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
|
@ -29,7 +29,7 @@ int lcr_ifact_reference (
|
||||
void **interface,
|
||||
void *context);
|
||||
|
||||
The iface_name is the name of the interface, the version is the version,
|
||||
The iface_name is the name of the interface, the version is the version,
|
||||
the void **interface is the list of functions returned once the interface
|
||||
has been dynamically loaded and referenced, and context is passed to the
|
||||
constructor and destructor.
|
||||
@ -108,6 +108,6 @@ demonstrates usage. The test_static demonstrates operation when statically
|
||||
linked. Note the dynamic inteface factory is still available for use when
|
||||
statically linking components.
|
||||
|
||||
On startup, a thread is created which listens for requests from the "uic"
|
||||
On startup, a thread is created which listens for requests from the "uic"
|
||||
application. These requests are then processed by the lcr service which
|
||||
would execute a live replacement.
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (C) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -60,7 +60,7 @@ struct lcr_iface_instance {
|
||||
void *context;
|
||||
void (*destructor) (void *context);
|
||||
};
|
||||
|
||||
|
||||
DECLARE_HDB_DATABASE_FIRSTRUN (lcr_component_instance_database);
|
||||
|
||||
DECLARE_HDB_DATABASE_FIRSTRUN (lcr_iface_instance_database);
|
||||
@ -186,7 +186,7 @@ static void defaults_path_build (void)
|
||||
if (res != NULL && (path_list[0] = strdup (cwd)) != NULL) {
|
||||
path_list_entries++;
|
||||
}
|
||||
|
||||
|
||||
path_list[path_list_entries++] = LCRSODIR;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (C) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (C) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (C) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -52,7 +52,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#if defined(COROSYNC_LINUX) || defined(COROSYNC_SOLARIS)
|
||||
/* SUN_LEN is broken for abstract namespace
|
||||
/* SUN_LEN is broken for abstract namespace
|
||||
*/
|
||||
#define AIS_SUN_LEN(a) sizeof(*(a))
|
||||
#else
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2006 Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -54,7 +54,7 @@
|
||||
#define SERVER_BACKLOG 5
|
||||
|
||||
#if defined(COROSYNC_LINUX) || defined(COROSYNC_SOLARIS)
|
||||
/* SUN_LEN is broken for abstract namespace
|
||||
/* SUN_LEN is broken for abstract namespace
|
||||
*/
|
||||
#define AIS_SUN_LEN(a) sizeof(*(a))
|
||||
#else
|
||||
@ -170,11 +170,11 @@ static void *lcr_uis_server (void *data)
|
||||
if (nfds == 1 && ufds[0].revents & POLLIN) {
|
||||
ufds[1].fd = accept (ufds[0].fd,
|
||||
(struct sockaddr *)&un_addr, &addrlen);
|
||||
#ifdef COROSYNC_LINUX
|
||||
#ifdef COROSYNC_LINUX
|
||||
setsockopt(ufds[1].fd, SOL_SOCKET, SO_PASSCRED,
|
||||
&on, sizeof (on));
|
||||
#endif
|
||||
nfds = 2;
|
||||
nfds = 2;
|
||||
}
|
||||
if (ufds[0].revents & POLLIN) {
|
||||
lcr_uis_dispatch (ufds[1].fd);
|
||||
|
@ -1,14 +1,14 @@
|
||||
#
|
||||
# Copyright (c) 2009 Red Hat, Inc.
|
||||
#
|
||||
#
|
||||
# Authors: Andrew Beekhof
|
||||
# Steven Dake (sdake@redhat.com)
|
||||
#
|
||||
# This software licensed under BSD license, the text of which follows:
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
@ -67,7 +67,7 @@ if BUILD_DARWIN
|
||||
libcoroipcc.so.$(SONAME): coroipcc.o
|
||||
$(CC) $(LDFLAGS) $(DARWIN_OPTS) coroipcc.o -o $@ $(AM_LDFLAGS)
|
||||
|
||||
libconfdb.so.$(SONAME): coroipcc.o confdb.o sa-confdb.o
|
||||
libconfdb.so.$(SONAME): coroipcc.o confdb.o sa-confdb.o
|
||||
$(CC) $(LDFLAGS) $(DARWIN_OPTS) coroipcc.o confdb.o \
|
||||
sa-confdb.o ../lcr/lcr_ifact.o -o $@ -ldl $(AM_LDFLAGS)
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -93,7 +93,7 @@ struct ipc_segment {
|
||||
|
||||
|
||||
#if defined(COROSYNC_LINUX)
|
||||
/* SUN_LEN is broken for abstract namespace
|
||||
/* SUN_LEN is broken for abstract namespace
|
||||
*/
|
||||
#define AIS_SUN_LEN(a) sizeof(*(a))
|
||||
#else
|
||||
@ -106,7 +106,7 @@ void socket_nosigpipe(int s)
|
||||
int on = 1;
|
||||
setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, (void *)&on, sizeof(on));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MSG_NOSIGNAL
|
||||
#define MSG_NOSIGNAL 0
|
||||
@ -242,13 +242,13 @@ error_exit:
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
static int
|
||||
priv_change_send (struct ipc_segment *ipc_segment)
|
||||
{
|
||||
char buf_req;
|
||||
mar_req_priv_change req_priv_change;
|
||||
unsigned int res;
|
||||
|
||||
|
||||
req_priv_change.euid = geteuid();
|
||||
/*
|
||||
* Don't resend request unless euid has changed
|
||||
@ -282,7 +282,7 @@ union semun {
|
||||
struct seminfo *__buf;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
static int
|
||||
circular_memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
{
|
||||
@ -292,7 +292,7 @@ circular_memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
int res;
|
||||
|
||||
sprintf (path, "/dev/shm/%s", file);
|
||||
|
||||
|
||||
fd = mkstemp (path);
|
||||
if (fd == -1) {
|
||||
sprintf (path, "/var/run/%s", file);
|
||||
@ -306,22 +306,22 @@ circular_memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
|
||||
addr_orig = mmap (NULL, bytes << 1, PROT_NONE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||
|
||||
|
||||
if (addr_orig == MAP_FAILED) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, fd, 0);
|
||||
|
||||
|
||||
if (addr != addr_orig) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
addr = mmap (((char *)addr_orig) + bytes,
|
||||
bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, fd, 0);
|
||||
|
||||
|
||||
res = close (fd);
|
||||
if (res) {
|
||||
return (-1);
|
||||
@ -329,12 +329,12 @@ circular_memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
*buf = addr_orig;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
memory_unmap (void *addr, size_t bytes)
|
||||
{
|
||||
int res;
|
||||
|
||||
|
||||
res = munmap (addr, bytes);
|
||||
}
|
||||
|
||||
@ -347,7 +347,7 @@ memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
int res;
|
||||
|
||||
sprintf (path, "/dev/shm/%s", file);
|
||||
|
||||
|
||||
fd = mkstemp (path);
|
||||
if (fd == -1) {
|
||||
sprintf (path, "/var/run/%s", file);
|
||||
@ -361,18 +361,18 @@ memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
|
||||
addr_orig = mmap (NULL, bytes, PROT_NONE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||
|
||||
|
||||
if (addr_orig == MAP_FAILED) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, fd, 0);
|
||||
|
||||
|
||||
if (addr != addr_orig) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
res = close (fd);
|
||||
if (res) {
|
||||
return (-1);
|
||||
@ -380,7 +380,7 @@ memory_map (char *path, const char *file, void **buf, size_t bytes)
|
||||
*buf = addr_orig;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
extern cs_error_t
|
||||
coroipcc_service_connect (
|
||||
const char *socket_name,
|
||||
@ -587,7 +587,7 @@ retry_poll:
|
||||
poll_events = poll (&ufds, 1, timeout);
|
||||
if (poll_events == -1 && errno == EINTR) {
|
||||
goto retry_poll;
|
||||
} else
|
||||
} else
|
||||
if (poll_events == -1) {
|
||||
return (-1);
|
||||
} else
|
||||
@ -965,7 +965,7 @@ coroipcc_zcb_msg_send_reply_receive (
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
|
||||
cs_error_t
|
||||
saHandleCreate (
|
||||
struct saHandleDatabase *handleDatabase,
|
||||
@ -1069,7 +1069,7 @@ saHandleInstanceGet (
|
||||
struct saHandleDatabase *handleDatabase,
|
||||
uint64_t inHandle,
|
||||
void **instance)
|
||||
{
|
||||
{
|
||||
uint32_t check = inHandle >> 32;
|
||||
uint32_t handle = inHandle & 0xffffffff;
|
||||
|
||||
|
18
lib/evs.c
18
lib/evs.c
@ -232,7 +232,7 @@ evs_error_t evs_dispatch (
|
||||
|
||||
if (dispatch_avail == 0 && dispatch_types == EVS_DISPATCH_ALL) {
|
||||
break; /* exit do while cont is 1 loop */
|
||||
} else
|
||||
} else
|
||||
if (dispatch_avail == 0) {
|
||||
continue; /* next dispatch event */
|
||||
}
|
||||
@ -325,7 +325,7 @@ evs_error_t evs_join (
|
||||
return (error);
|
||||
}
|
||||
|
||||
req_lib_evs_join.header.size = sizeof (struct req_lib_evs_join) +
|
||||
req_lib_evs_join.header.size = sizeof (struct req_lib_evs_join) +
|
||||
(group_entries * sizeof (struct evs_group));
|
||||
req_lib_evs_join.header.id = MESSAGE_REQ_EVS_JOIN;
|
||||
req_lib_evs_join.group_entries = group_entries;
|
||||
@ -334,7 +334,7 @@ evs_error_t evs_join (
|
||||
iov[0].iov_len = sizeof (struct req_lib_evs_join);
|
||||
iov[1].iov_base = (void*) groups; /* cast away const */
|
||||
iov[1].iov_len = (group_entries * sizeof (struct evs_group));
|
||||
|
||||
|
||||
pthread_mutex_lock (&evs_inst->response_mutex);
|
||||
|
||||
error = coroipcc_msg_send_reply_receive (evs_inst->ipc_ctx, iov, 2,
|
||||
@ -370,7 +370,7 @@ evs_error_t evs_leave (
|
||||
return (error);
|
||||
}
|
||||
|
||||
req_lib_evs_leave.header.size = sizeof (struct req_lib_evs_leave) +
|
||||
req_lib_evs_leave.header.size = sizeof (struct req_lib_evs_leave) +
|
||||
(group_entries * sizeof (struct evs_group));
|
||||
req_lib_evs_leave.header.id = MESSAGE_REQ_EVS_LEAVE;
|
||||
req_lib_evs_leave.group_entries = group_entries;
|
||||
@ -379,7 +379,7 @@ evs_error_t evs_leave (
|
||||
iov[0].iov_len = sizeof (struct req_lib_evs_leave);
|
||||
iov[1].iov_base = (void *) groups; /* cast away const */
|
||||
iov[1].iov_len = (group_entries * sizeof (struct evs_group));
|
||||
|
||||
|
||||
pthread_mutex_lock (&evs_inst->response_mutex);
|
||||
|
||||
error = coroipcc_msg_send_reply_receive (evs_inst->ipc_ctx, iov, 2,
|
||||
@ -432,7 +432,7 @@ evs_error_t evs_mcast_joined (
|
||||
iov[0].iov_base = &req_lib_evs_mcast_joined;
|
||||
iov[0].iov_len = sizeof (struct req_lib_evs_mcast_joined);
|
||||
memcpy (&iov[1], iovec, iov_len * sizeof (struct iovec));
|
||||
|
||||
|
||||
pthread_mutex_lock (&evs_inst->response_mutex);
|
||||
|
||||
error = coroipcc_msg_send_reply_receive (evs_inst->ipc_ctx, iov,
|
||||
@ -477,7 +477,7 @@ evs_error_t evs_mcast_groups (
|
||||
for (i = 0; i < iov_len; i++) {
|
||||
msg_len += iovec[i].iov_len;
|
||||
}
|
||||
req_lib_evs_mcast_groups.header.size = sizeof (struct req_lib_evs_mcast_groups) +
|
||||
req_lib_evs_mcast_groups.header.size = sizeof (struct req_lib_evs_mcast_groups) +
|
||||
(group_entries * sizeof (struct evs_group)) + msg_len;
|
||||
req_lib_evs_mcast_groups.header.id = MESSAGE_REQ_EVS_MCAST_GROUPS;
|
||||
req_lib_evs_mcast_groups.guarantee = guarantee;
|
||||
@ -489,7 +489,7 @@ evs_error_t evs_mcast_groups (
|
||||
iov[1].iov_base = (void *) groups; /* cast away const */
|
||||
iov[1].iov_len = (group_entries * sizeof (struct evs_group));
|
||||
memcpy (&iov[2], iovec, iov_len * sizeof (struct iovec));
|
||||
|
||||
|
||||
pthread_mutex_lock (&evs_inst->response_mutex);
|
||||
|
||||
error = coroipcc_msg_send_reply_receive (evs_inst->ipc_ctx, iov,
|
||||
@ -558,7 +558,7 @@ evs_error_t evs_membership_get (
|
||||
*member_list_entries = MIN (*member_list_entries,
|
||||
res_lib_evs_membership_get.member_list_entries);
|
||||
if (member_list) {
|
||||
memcpy (member_list, &res_lib_evs_membership_get.member_list,
|
||||
memcpy (member_list, &res_lib_evs_membership_get.member_list,
|
||||
*member_list_entries * sizeof (struct in_addr));
|
||||
}
|
||||
|
||||
|
@ -14,8 +14,8 @@ COROSYNC_CFG_0.82 {
|
||||
corosync_cfg_ring_reenable;
|
||||
corosync_cfg_service_load;
|
||||
corosync_cfg_service_unload;
|
||||
|
||||
|
||||
|
||||
|
||||
local:
|
||||
coroipcc_service_connect;
|
||||
coroipcc_service_disconnect;
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Version and symbol export for libquorum.so
|
||||
|
||||
COROSYNC_QUORUM_1.0 {
|
||||
global:
|
||||
global:
|
||||
quorum_initialize;
|
||||
quorum_finalize;
|
||||
quorum_getquorate;
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Version and symbol export for libvotequorum.so
|
||||
|
||||
COROSYNC_VOTEQUORUM_1.0 {
|
||||
global:
|
||||
global:
|
||||
votequorum_initialize;
|
||||
votequorum_finalize;
|
||||
votequorum_getinfo;
|
||||
|
@ -6,7 +6,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -175,7 +175,7 @@ unsigned int pload_fd_get (
|
||||
return (error);
|
||||
}
|
||||
|
||||
*fd = coroipcc_fd_get (pload_inst->ipc_ctx);
|
||||
*fd = coroipcc_fd_get (pload_inst->ipc_ctx);
|
||||
|
||||
(void)saHandleInstancePut (&pload_handle_t_db, handle);
|
||||
|
||||
@ -207,7 +207,7 @@ unsigned int pload_start (
|
||||
|
||||
iov.iov_base = (char *)&req_lib_pload_start;
|
||||
iov.iov_len = sizeof (struct req_lib_pload_start);
|
||||
|
||||
|
||||
pthread_mutex_lock (&pload_inst->response_mutex);
|
||||
|
||||
error = coroipcc_msg_send_reply_receive(pload_inst->ipc_ctx,
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Author: Steven Dake (sdake@redhat.com)
|
||||
*
|
||||
* This software licensed under BSD license, the text of which follows:
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
@ -49,7 +49,7 @@
|
||||
#else
|
||||
#define DPRINT(s)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef SO_NOSIGPIPE
|
||||
#ifndef MSG_NOSIGNAL
|
||||
#define MSG_NOSIGNAL 0
|
||||
|
@ -3,14 +3,14 @@
|
||||
#
|
||||
# Authors: Steven Dake (sdake@redhat.com)
|
||||
# Fabio M. Di Nitto (fdinitto@redhat.com)
|
||||
#
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
#
|
||||
# This software licensed under BSD license, the text of which follows:
|
||||
#
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -44,7 +44,7 @@ The
|
||||
function is used to dispatch configuration changes.
|
||||
.PP
|
||||
Each application may have several connections to the CONFDB API. Each application
|
||||
uses the
|
||||
uses the
|
||||
.I handle
|
||||
argument to uniquely identify the connection.
|
||||
.PP
|
||||
@ -95,15 +95,15 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -64,14 +64,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -60,15 +60,15 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -44,7 +44,7 @@ The
|
||||
function is used to initialize a connection to the configuration database API.
|
||||
.PP
|
||||
Each application may have several connections to the CONFDB API. Each application
|
||||
uses the
|
||||
uses the
|
||||
.I handle
|
||||
argument to uniquely identify the connection. The
|
||||
.I handle
|
||||
@ -97,7 +97,7 @@ typedef struct {
|
||||
When a configuration change occurs, the callback
|
||||
is called from the
|
||||
.B confdb_dispatch()
|
||||
function.
|
||||
function.
|
||||
.PP
|
||||
.SH RETURN VALUE
|
||||
This call returns the CONFDB_OK value if successful, otherwise an error is returned.
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -73,14 +73,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -69,14 +69,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -44,13 +44,13 @@ confdb_key_iter \- Iterate through key/value pairs in the Configuration Database
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B confdb_key_iter
|
||||
function repeatedly returns all key/value pairs that are subobjects of the specified parent. You must call
|
||||
function repeatedly returns all key/value pairs that are subobjects of the specified parent. You must call
|
||||
.B confdb_key_iter_start
|
||||
first. This establishes a context for the parent object so that it knows where you are in the list. Then the next call to
|
||||
.B confdb_key_iter
|
||||
will return the first key/value in the list. Subsequent calls will return any remaining keys. The function returns CONFDB_ERR_ACCESS when the all of the matching keys have been seen.
|
||||
.BR
|
||||
The library holds a seperate context for each parent object, so you can call confdb_key_iter() on several parent objects at the same time and they will not interfere. Nor will they interfere with
|
||||
The library holds a seperate context for each parent object, so you can call confdb_key_iter() on several parent objects at the same time and they will not interfere. Nor will they interfere with
|
||||
.B confdb_object_find
|
||||
or
|
||||
.B confdb_object_iter
|
||||
@ -69,14 +69,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -54,7 +54,7 @@ unique in the database, so a value is not enough to uniqely identify a key belon
|
||||
to a particular parent object.
|
||||
.BR
|
||||
Strictly, even give the key name and value is not enough to uniquely identify a key,
|
||||
If there are two (or more) keys with the same name and value, only the first will have
|
||||
If there are two (or more) keys with the same name and value, only the first will have
|
||||
its value changed .
|
||||
.SH RETURN VALUE
|
||||
This call returns the CONFDB_OK value if successful, otherwise an error is returned.
|
||||
@ -69,14 +69,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -53,11 +53,11 @@ On success the handle of the new object is returned in
|
||||
This value should be used to refer to the object in future, eg when retrieving sub-keys or if the
|
||||
object is destroyed.
|
||||
.B parent_object_handle
|
||||
is the handle of the object that is the parent of the new object. This can be
|
||||
is the handle of the object that is the parent of the new object. This can be
|
||||
.B OBJECT_PARENT_HANDLE
|
||||
if the new object is to be a child of the top-level object.
|
||||
.BR
|
||||
Object names are not required to be unique in the database. If you call
|
||||
Object names are not required to be unique in the database. If you call
|
||||
.B confdb_object_create
|
||||
twice with the same parameters you will create two different objects with the same name
|
||||
but distinct object handles. You can iterate through similarly name objects using the
|
||||
@ -76,14 +76,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -40,17 +40,17 @@ confdb_object_destroy \- Remove an object from the Configuration Database
|
||||
.BI "confdb_error_t confdb_destroy(confdb_handle_t " handle ", unsigned int " object_handle ");
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B confdb_object_destroy
|
||||
.B confdb_object_destroy
|
||||
call removes an object from the configuration database. It also remove all subkeys and all
|
||||
subobjects in the database, so be VERY CAREFUL!.
|
||||
subobjects in the database, so be VERY CAREFUL!.
|
||||
.BR
|
||||
The input value
|
||||
The input value
|
||||
.B object_handle
|
||||
is the handle of the object to remove, this can be got from the
|
||||
is the handle of the object to remove, this can be got from the
|
||||
.B confdb_object_find
|
||||
or
|
||||
or
|
||||
.B confdb_object_iter
|
||||
calls or
|
||||
calls or
|
||||
.B confdb_object_create
|
||||
calls.
|
||||
.SH RETURN VALUE
|
||||
@ -66,14 +66,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -46,24 +46,24 @@ confdb_object_find \- Find a named object in the Configuration Database
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B confdb_object_find
|
||||
function repeatedly returns objects that match a given name. You must call
|
||||
function repeatedly returns objects that match a given name. You must call
|
||||
.B confdb_object_find_start
|
||||
first. This establishes a context for the parent object so that it knows where you are in the list. Then the next call to
|
||||
.B confdb_object_find
|
||||
will return the handle of the first object that matches the passed in name. Subsequent calls will return any remaining objects
|
||||
with the same name. The function returns CONFDB_ERR_ACCESS when the all of the matching objects have been seen.
|
||||
.BR
|
||||
You need to provide the same object name and length for each call to
|
||||
You need to provide the same object name and length for each call to
|
||||
.B confdb_object_find,
|
||||
If you change either of then, the results are undefined.
|
||||
.BR
|
||||
The library holds a seperate context for each parent object, so you can call confdb_object_iter() on several parent objects at the same time and they will not interfere. Nor will they interfere with
|
||||
The library holds a seperate context for each parent object, so you can call confdb_object_iter() on several parent objects at the same time and they will not interfere. Nor will they interfere with
|
||||
.B confdb_object_iter
|
||||
or
|
||||
.B confdb_key_iter
|
||||
calls on the same parent object.
|
||||
.BR
|
||||
.B When you have finished searching for objects, call the
|
||||
.B When you have finished searching for objects, call the
|
||||
.B confdb_object_find_destroy
|
||||
library call to free up memory associated with the search context.
|
||||
.SH RETURN VALUE
|
||||
@ -79,14 +79,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -46,14 +46,14 @@ confdb_object_iter \- Iterate through objects in the Configuration Database
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B confdb_object_iter
|
||||
function repeatedly returns all objects that are subobjects of the specified parent. You must call
|
||||
function repeatedly returns all objects that are subobjects of the specified parent. You must call
|
||||
.B confdb_object_iter_start
|
||||
first. This establishes a context for the parent object so that it knows where you are in the list. Then the next call to
|
||||
.B confdb_object_iter
|
||||
will return the handle of the first object in the list. Subsequent calls will return any remaining objects. The function returns CONFDB_ERR_ACCESS when the all of the matching objects have been seen. The function returns the name and length of the object as well
|
||||
as its handle.
|
||||
.BR
|
||||
.B When you have finished searching for objects, call the
|
||||
.B When you have finished searching for objects, call the
|
||||
.B confdb_object_iter_destroy
|
||||
library call to free up memory associated with the search context.
|
||||
.BR
|
||||
@ -71,14 +71,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -42,7 +42,7 @@ confdb_parent_get \- Configuration Database Object Parent
|
||||
The
|
||||
.B confdb_object_parent_get
|
||||
returns the parent object handle of already known object.
|
||||
.B object_handle
|
||||
.B object_handle
|
||||
is the handle of an existing object
|
||||
.B parent_object_handle
|
||||
returns the handle of its parent.
|
||||
@ -59,14 +59,14 @@ The errors are undocumented.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -64,14 +64,14 @@ This software is not yet production, so there may still be some bugs.
|
||||
.BR confdb_object_create (3),
|
||||
.BR confdb_object_destroy (3),
|
||||
.BR confdb_object_parent_get (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_create (3),
|
||||
.BR confdb_key_delete (3),
|
||||
.BR confdb_key_get (3),
|
||||
.BR confdb_key_replace (3),
|
||||
.BR confdb_object_find_start (3),
|
||||
.BR confdb_object_find (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.BR confdb_object_iter_start (3),
|
||||
.BR confdb_object_iter (3),
|
||||
.BR confdb_key_iter_start (3),
|
||||
.BR confdb_key_iter (3),
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Steven Dake (sdake@redhat.com)
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -117,9 +117,9 @@ communication. To disconnect, the client either exits or executes the
|
||||
function coroipcc_service_disconnect(3).
|
||||
|
||||
.SH Synchronous communication
|
||||
There are two functions for sending a request and receiving a response. The
|
||||
There are two functions for sending a request and receiving a response. The
|
||||
first function coroipcc_msg_send_reply_receive(3) sends an iovector request
|
||||
and receives a response. This function copies the response into the response
|
||||
and receives a response. This function copies the response into the response
|
||||
buffer. the second function coroipcc_msg_end_reply_receive_in_buf(3) does not
|
||||
copy the response buffer and allows for zero-copy reading of the response
|
||||
when the lifetime of the response buffer is known.
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Angus Salkeld (angus.salkeld@alliedtelesis.co.nz)
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -7,7 +7,7 @@
|
||||
.\" * Author: Steven Dake (sdake@redhat.com)
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -61,13 +61,13 @@ This top level directive contains configuration options for user privilegies.
|
||||
|
||||
.PP
|
||||
.PP
|
||||
Within the
|
||||
Within the
|
||||
.B totem
|
||||
directive, an interface directive is required. There is also one configuration
|
||||
option which is required:
|
||||
.PP
|
||||
.PP
|
||||
Within the
|
||||
Within the
|
||||
.B interface
|
||||
sub-directive of totem there are four parameters which are required:
|
||||
|
||||
@ -108,8 +108,8 @@ UDP ports.
|
||||
|
||||
.PP
|
||||
.PP
|
||||
Within the
|
||||
.B totem
|
||||
Within the
|
||||
.B totem
|
||||
directive, there are seven configuration options of which one is required,
|
||||
five are optional, and one is required when IPV6 is configured in the interface
|
||||
subdirective. The required directive controls the version of the totem
|
||||
@ -184,13 +184,13 @@ Please note while some NICs or switches claim large frame support, they support
|
||||
9000 MTU as the maximum frame size including the IP header. Setting the netmtu
|
||||
and host MTUs to 9000 will cause totem to use the full 9000 bytes of the frame.
|
||||
Then Linux will add a 18 byte header moving the full frame size to 9018. As a
|
||||
result some hardware will not operate properly with this size of data. A netmtu
|
||||
result some hardware will not operate properly with this size of data. A netmtu
|
||||
of 8982 seems to work for the few large frame devices that have been tested.
|
||||
Some manufacturers claim large frame support when in fact they support frame
|
||||
sizes of 4500 bytes.
|
||||
|
||||
Increasing the MTU from 1500 to 8982 doubles throughput performance from 30MB/sec
|
||||
to 60MB/sec as measured with evsbench with 175000 byte messages with the secauth
|
||||
to 60MB/sec as measured with evsbench with 175000 byte messages with the secauth
|
||||
directive set to off.
|
||||
|
||||
When sending multicast traffic, if the network frequently reconfigures, chances are
|
||||
@ -208,7 +208,7 @@ If secauth is on, this directive allows systems to be configured to use
|
||||
multiple threads to encrypt and send multicast messages.
|
||||
|
||||
A thread directive of 0 indicates that no threaded send should be used. This
|
||||
mode offers best performance for non-SMP systems.
|
||||
mode offers best performance for non-SMP systems.
|
||||
|
||||
The default is 0.
|
||||
|
||||
@ -217,15 +217,15 @@ vsftype
|
||||
This directive controls the virtual synchrony filter type used to identify
|
||||
a primary component. The preferred choice is YKD dynamic linear voting,
|
||||
however, for clusters larger then 32 nodes YKD consumes alot of memory. For
|
||||
large scale clusters that are created by changing the MAX_PROCESSORS_COUNT
|
||||
large scale clusters that are created by changing the MAX_PROCESSORS_COUNT
|
||||
#define in the C code totem.h file, the virtual synchrony filter "none" is
|
||||
recommended but then AMF and DLCK services (which are currently experimental)
|
||||
are not safe for use.
|
||||
|
||||
The default is ykd. The vsftype can also be set to none.
|
||||
|
||||
Within the
|
||||
.B totem
|
||||
Within the
|
||||
.B totem
|
||||
directive, there are several configuration options which are used to control
|
||||
the operation of the protocol. It is generally not recommended to change any
|
||||
of these values without proper guidance and sufficient testing. Some networks
|
||||
@ -269,7 +269,7 @@ The default is 4 retransmissions.
|
||||
|
||||
.TP
|
||||
join
|
||||
This timeout specifies in milliseconds how long to wait for join messages in
|
||||
This timeout specifies in milliseconds how long to wait for join messages in
|
||||
the membership protocol.
|
||||
|
||||
The default is 100 milliseconds.
|
||||
@ -328,10 +328,10 @@ The default is 30 rotations.
|
||||
heartbeat_failures_allowed
|
||||
[HeartBeating mechanism]
|
||||
Configures the optional HeartBeating mechanism for faster failure detection. Keep in
|
||||
mind that engaging this mechanism in lossy networks could cause faulty loss declaration
|
||||
as the mechanism relies on the network for heartbeating.
|
||||
mind that engaging this mechanism in lossy networks could cause faulty loss declaration
|
||||
as the mechanism relies on the network for heartbeating.
|
||||
|
||||
So as a rule of thumb use this mechanism if you require improved failure in low to
|
||||
So as a rule of thumb use this mechanism if you require improved failure in low to
|
||||
medium utilized networks.
|
||||
|
||||
This constant specifies the number of heartbeat failures the system should tolerate
|
||||
@ -409,7 +409,7 @@ override this value without guidance from the corosync community.
|
||||
The default is 47 milliseconds.
|
||||
|
||||
.PP
|
||||
Within the
|
||||
Within the
|
||||
.B logging
|
||||
directive, there are several configuration options which are all optional.
|
||||
|
||||
@ -454,7 +454,7 @@ The default is syslog and stderr.
|
||||
|
||||
.TP
|
||||
logfile
|
||||
If the
|
||||
If the
|
||||
.B to_logfile
|
||||
directive is set to
|
||||
.B yes
|
||||
@ -469,11 +469,11 @@ Possible values are: alert, crit, debug (same as debug = on), emerg, err, info,
|
||||
|
||||
The default is: info.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
syslog_facility
|
||||
This specifies the syslog facility type that will be used for any messages
|
||||
sent to syslog. options are daemon, local0, local1, local2, local3, local4,
|
||||
local5, local6 & local7.
|
||||
sent to syslog. options are daemon, local0, local1, local2, local3, local4,
|
||||
local5, local6 & local7.
|
||||
|
||||
The default is daemon.
|
||||
|
||||
@ -503,12 +503,12 @@ enter|leave|trace1|trace2|trace3|...
|
||||
The default is none.
|
||||
|
||||
.PP
|
||||
Within the
|
||||
Within the
|
||||
.B logging
|
||||
directive, logger_subsys directives are optional.
|
||||
|
||||
.PP
|
||||
Within the
|
||||
Within the
|
||||
.B logger_subsys
|
||||
sub-directive, all of the above logging configuration options are valid and
|
||||
can be used to override the default settings.
|
||||
|
@ -7,7 +7,7 @@
|
||||
.\" * Author: Steven Dake (sdake@redhat.com)
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -76,7 +76,7 @@ processes or nodes, a mechanism must exist for them to communicate.
|
||||
This mechanism is provided by two services. The event service provides
|
||||
a publish/subscribe model for events. The messaging service provides
|
||||
end to end messaging. Finally a mechanism to synchronize access is
|
||||
provided by the distributed lock service.
|
||||
provided by the distributed lock service.
|
||||
|
||||
The corosync project also provides a group messaging toolkit called EVS.
|
||||
The EVS service implements a messaging model known as Extended Virtual
|
||||
@ -144,7 +144,7 @@ reference the AIS interfaces.
|
||||
|
||||
The corosync project recommends to distros to place include files in
|
||||
/usr/include/corosync. The following include lines must be added to
|
||||
the application to use each of the following services:
|
||||
the application to use each of the following services:
|
||||
|
||||
#include <corosync/saClm.h> For the Cluster Membership B.01.01 service.
|
||||
.PP
|
||||
@ -257,7 +257,7 @@ be setuid or setgid in the filesystem.
|
||||
.SH SAFTEST COMPLIANCE
|
||||
The corosync libraries are now nearly compliant with every aspect of the SA
|
||||
Forum's AIS specification. The AMF service, however, is not compliant with the
|
||||
B.01.01 specification. The remaining services pass most of the tests of the
|
||||
B.01.01 specification. The remaining services pass most of the tests of the
|
||||
saftest suite against the B.01.01 specification.
|
||||
|
||||
.SH BUGS
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -45,7 +45,7 @@ function is used to dispatch configuration changes or messages from the
|
||||
closed process groups API.
|
||||
.PP
|
||||
Each application may have several connections to the CPG API. Each application
|
||||
uses the
|
||||
uses the
|
||||
.I handle
|
||||
argument to uniquely identify the connection.
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Christine Caulfield <ccaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -44,7 +44,7 @@ The
|
||||
function is used to initialize a connection to the closed process groups API.
|
||||
.PP
|
||||
Each application may have several connections to the CPG API. Each application
|
||||
uses the
|
||||
uses the
|
||||
.I handle
|
||||
argument to uniquely identify the connection. The
|
||||
.I handle
|
||||
@ -120,7 +120,7 @@ is called.
|
||||
|
||||
The
|
||||
.I cpg_address
|
||||
structure is defined
|
||||
structure is defined
|
||||
.IP
|
||||
.RS
|
||||
.ne 18
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -44,7 +44,7 @@ The
|
||||
function is used to join one group. When a group is joined, using the
|
||||
.B cpg_mcast_joined(3)
|
||||
function will multicast to the groups joined in the argument
|
||||
.I handle.
|
||||
.I handle.
|
||||
The process will also get notifications of other processes joining
|
||||
and leaving the group.
|
||||
Messages that are sent to any of the groups joined to the parameter
|
||||
@ -57,14 +57,14 @@ the process will start to receive callbacks relating to messages send from membe
|
||||
of the group or notifications of process joining/leaving the group.
|
||||
.PP
|
||||
Note that more than one process can join a CPG group and each will receive its
|
||||
own copy of any messages sent using
|
||||
own copy of any messages sent using
|
||||
.I cpg_mcast_joined()
|
||||
and its own confchg callback.
|
||||
.PP
|
||||
|
||||
The argument
|
||||
.I group
|
||||
is used to specify the group to join.
|
||||
is used to specify the group to join.
|
||||
|
||||
|
||||
The
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -42,7 +42,7 @@ cpg_leave \- Leave a group in the CPG library
|
||||
The
|
||||
.B cpg_leave
|
||||
function is used to leave a group. Once a group has been left the process will
|
||||
no longer receive messages or notifications about events in that group. NOTE: that a group is
|
||||
no longer receive messages or notifications about events in that group. NOTE: that a group is
|
||||
only deemed to have left the group once it has been notified (by its confchg callback)
|
||||
that is has left. So expect to receive at least one confchg callback after calling
|
||||
this function.
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Steven Dake <sdake@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -46,7 +46,7 @@ function is used to determine the local processor's identifier.
|
||||
The argument
|
||||
.I handle
|
||||
is used to reference the cpg instantiation.
|
||||
The argument
|
||||
The argument
|
||||
.I local_nodeid
|
||||
will return the 32 bit node id.
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -73,7 +73,7 @@ typedef enum {
|
||||
The meanings of the cpg_guarantee_t typedef are:
|
||||
.TP
|
||||
.B CPG_TYPE_UNORDERED
|
||||
Messages are guaranteed to be delivered, but with no particular order. This
|
||||
Messages are guaranteed to be delivered, but with no particular order. This
|
||||
mode is unimplemented in the CPG library.
|
||||
.TP
|
||||
.B CPG_TYPE_FIFO
|
||||
@ -114,7 +114,7 @@ The
|
||||
.I iov_len
|
||||
argument describes the number of entires in the
|
||||
.I iovec
|
||||
argument.
|
||||
argument.
|
||||
|
||||
.SH RETURN VALUE
|
||||
This call returns the CPG_OK value if successful, otherwise an error is returned.
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -48,7 +48,7 @@ the cpg_join() function containing your process.
|
||||
The argument
|
||||
.I handle
|
||||
is used to reference the cpg instantiation.
|
||||
The argument
|
||||
The argument
|
||||
.I groupName
|
||||
will return the name of the group
|
||||
The argument
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Patrick Caulfield <pcaulfie@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Steven Dake <sdake@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Steven Dake <sdake@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Steven Dake <sdake@redhat.com>
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -74,7 +74,7 @@ typedef enum {
|
||||
The meanings of the cpg_guarantee_t typedef are:
|
||||
.TP
|
||||
.B CPG_TYPE_UNORDERED
|
||||
Messages are guaranteed to be delivered, but with no particular order. This
|
||||
Messages are guaranteed to be delivered, but with no particular order. This
|
||||
mode is unimplemented in the CPG library.
|
||||
.TP
|
||||
.B CPG_TYPE_FIFO
|
||||
@ -94,7 +94,7 @@ unimplemented in the CPG library.
|
||||
The
|
||||
.I msg
|
||||
argument describes the zero copy buffer which is used to transmit a message.
|
||||
this buffer must be allocated by
|
||||
this buffer must be allocated by
|
||||
.B cpg_zcb_alloc(3).
|
||||
|
||||
.PP
|
||||
|
@ -6,7 +6,7 @@
|
||||
.\" * Author: Steven Dake (sdake@redhat.com)
|
||||
.\" *
|
||||
.\" * This software licensed under BSD license, the text of which follows:
|
||||
.\" *
|
||||
.\" *
|
||||
.\" * Redistribution and use in source and binary forms, with or without
|
||||
.\" * modification, are permitted provided that the following conditions are met:
|
||||
.\" *
|
||||
@ -45,7 +45,7 @@ function is used to dispatch configuration changes or messages from the
|
||||
extended virtual synchrony API.
|
||||
.PP
|
||||
Each application may have several connections to the EVS API. Each application
|
||||
uses the
|
||||
uses the
|
||||
.I handle
|
||||
argument to uniquely identify the connection.
|
||||
.PP
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user