1
1

implemented several unresolved functions

This commit was SVN r578.
Этот коммит содержится в:
Tim Woodall 2004-01-29 15:34:47 +00:00
родитель f6ab0af1db
Коммит 076c43a194
10 изменённых файлов: 83 добавлений и 29 удалений

Просмотреть файл

@ -165,6 +165,30 @@ int lam_ifnametoaddr(const char* if_name, struct sockaddr* addr, int length)
return LAM_ERROR; return LAM_ERROR;
} }
/*
* Look for interface by name and returns its
* corresponding kernel index.
*/
int lam_ifnametoindex(const char* if_name)
{
lam_if_t* intf;
int rc = lam_ifinit();
if(rc != LAM_SUCCESS)
return rc;
for(intf = (lam_if_t*)lam_list_get_first(&lam_if_list);
intf != (lam_if_t*)lam_list_get_end(&lam_if_list);
intf = (lam_if_t*)lam_list_get_next(intf)) {
if(strcmp(intf->if_name, if_name) == 0) {
return intf->if_index;
}
}
return -1;
}
/* /*
* Attempt to resolve the adddress as either a dotted decimal formated * Attempt to resolve the adddress as either a dotted decimal formated
* string or a hostname and lookup corresponding interface. * string or a hostname and lookup corresponding interface.

Просмотреть файл

@ -25,17 +25,9 @@ mca_ptl_tcp_t mca_ptl_tcp = {
0, /* ptl_frag_max_size */ 0, /* ptl_frag_max_size */
mca_ptl_tcp_add_proc, mca_ptl_tcp_add_proc,
mca_ptl_tcp_del_proc, mca_ptl_tcp_del_proc,
#if TIM_HASNT_IMPLEMENTED_THIS_YET
mca_ptl_tcp_fini, mca_ptl_tcp_fini,
#else
NULL,
#endif
mca_ptl_tcp_send, mca_ptl_tcp_send,
#if TIM_HASNT_IMPLEMENTED_THIS_YET
mca_ptl_tcp_request_alloc mca_ptl_tcp_request_alloc
#else
NULL
#endif
} }
}; };
@ -103,3 +95,16 @@ int mca_ptl_tcp_del_proc(struct mca_ptl_t* ptl, struct lam_proc_t *proc, struct
return LAM_SUCCESS; return LAM_SUCCESS;
} }
int mca_ptl_tcp_fini(struct mca_ptl_t* ptl)
{
return LAM_SUCCESS;
}
int mca_ptl_tcp_request_alloc(struct mca_ptl_t* ptl, struct mca_ptl_base_send_request_t** request)
{
int rc;
*request = (struct mca_ptl_base_send_request_t*)lam_free_list_get(&mca_ptl_tcp_module.tcp_send_requests, &rc);
return rc;
}

Просмотреть файл

@ -157,14 +157,12 @@ static int mca_ptl_tcp_module_create_instances(void)
argv = include = lam_argv_split(mca_ptl_tcp_module.tcp_if_include,'\''); argv = include = lam_argv_split(mca_ptl_tcp_module.tcp_if_include,'\'');
while(argv && *argv) { while(argv && *argv) {
char* if_name = *argv; char* if_name = *argv;
#if TIM_HASNT_IMPLEMENTED_THIS_YET
int if_index = lam_ifnametoindex(if_name); int if_index = lam_ifnametoindex(if_name);
if(if_index < 0) { if(if_index < 0) {
lam_output(0,"mca_ptl_tcp_module_init: invalid interface \"%s\"", if_name); lam_output(0,"mca_ptl_tcp_module_init: invalid interface \"%s\"", if_name);
} else { } else {
mca_ptl_tcp_create(if_index); mca_ptl_tcp_create(if_index);
} }
#endif
argv++; argv++;
} }
lam_argv_free(include); lam_argv_free(include);

Просмотреть файл

@ -121,11 +121,7 @@ int mca_ptl_tcp_peer_send(mca_ptl_peer_t* ptl_peer, mca_ptl_tcp_send_frag_t* fra
bool mca_ptl_tcp_peer_accept(mca_ptl_peer_t* ptl_peer, struct sockaddr_in* addr, int sd) bool mca_ptl_tcp_peer_accept(mca_ptl_peer_t* ptl_peer, struct sockaddr_in* addr, int sd)
{ {
mca_ptl_tcp_addr_t* ptl_addr; mca_ptl_tcp_addr_t* ptl_addr;
#if TIM_HASNT_IMPLEMENTED_THIS_YET
mca_ptl_tcp_proc_t* this_proc = mca_ptl_tcp_proc_local(); mca_ptl_tcp_proc_t* this_proc = mca_ptl_tcp_proc_local();
#else
mca_ptl_tcp_proc_t* this_proc = NULL;
#endif
THREAD_LOCK(&ptl_peer->peer_lock); THREAD_LOCK(&ptl_peer->peer_lock);
if((ptl_addr = ptl_peer->peer_addr) != NULL && if((ptl_addr = ptl_peer->peer_addr) != NULL &&
ptl_addr->addr_inet.s_addr == addr->sin_addr.s_addr) { ptl_addr->addr_inet.s_addr == addr->sin_addr.s_addr) {
@ -303,11 +299,7 @@ static int mca_ptl_tcp_peer_recv_connect_ack(mca_ptl_peer_t* ptl_peer)
static int mca_ptl_tcp_peer_send_connect_ack(mca_ptl_peer_t* ptl_peer) static int mca_ptl_tcp_peer_send_connect_ack(mca_ptl_peer_t* ptl_peer)
{ {
/* send process identifier to remote peer */ /* send process identifier to remote peer */
#if TIM_HASNT_IMPLEMENTED_THIS_YET
mca_ptl_tcp_proc_t* ptl_proc = mca_ptl_tcp_proc_local(); mca_ptl_tcp_proc_t* ptl_proc = mca_ptl_tcp_proc_local();
#else
mca_ptl_tcp_proc_t* ptl_proc = NULL;
#endif
uint32_t size_n = htonl(ptl_proc->proc_guid_size); uint32_t size_n = htonl(ptl_proc->proc_guid_size);
if(mca_ptl_tcp_peer_send_blocking(ptl_peer, &size_n, sizeof(size_n)) != sizeof(size_n) || if(mca_ptl_tcp_peer_send_blocking(ptl_peer, &size_n, sizeof(size_n)) != sizeof(size_n) ||
mca_ptl_tcp_peer_send_blocking(ptl_peer, ptl_proc->proc_guid, ptl_proc->proc_guid_size) != mca_ptl_tcp_peer_send_blocking(ptl_peer, ptl_proc->proc_guid, ptl_proc->proc_guid_size) !=

Просмотреть файл

@ -18,8 +18,8 @@ lam_class_info_t mca_ptl_tcp_proc_cls = {
static lam_list_t mca_ptl_tcp_procs; static lam_list_t mca_ptl_tcp_procs;
static lam_mutex_t mca_ptl_tcp_proc_mutex; static lam_mutex_t mca_ptl_tcp_proc_mutex;
static mca_ptl_tcp_proc_t* mca_ptl_tcp_proc;
static mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_lookup_lam(lam_proc_t* lam_proc); static mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_lookup_lam(lam_proc_t* lam_proc);
mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_self = 0;
@ -115,10 +115,8 @@ mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_create(lam_proc_t* lam_proc)
OBJ_RELEASE(ptl_proc); OBJ_RELEASE(ptl_proc);
return NULL; return NULL;
} }
#if TIM_HASNT_IMPLEMENTED_THIS_YET if(NULL == mca_ptl_tcp_proc_self && lam_proc == lam_proc_local())
if(lam_proc == lam_proc_local()) mca_ptl_tcp_proc_self = ptl_proc;
mca_ptl_tcp_proc = ptl_proc;
#endif
return ptl_proc; return ptl_proc;
} }

Просмотреть файл

@ -40,7 +40,14 @@ void mca_ptl_tcp_proc_destroy(mca_ptl_tcp_proc_t*);
mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_create(lam_proc_t* lam_proc); mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_create(lam_proc_t* lam_proc);
mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_lookup(void *guid, size_t size); mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_lookup(void *guid, size_t size);
mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_local(void);
static inline mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_local(void)
{
extern mca_ptl_tcp_proc_t* mca_ptl_tcp_proc_self;
if(NULL == mca_ptl_tcp_proc_self)
mca_ptl_tcp_proc_self = mca_ptl_tcp_proc_create(lam_proc_local());
return mca_ptl_tcp_proc_self;
}
int mca_ptl_tcp_proc_insert(mca_ptl_tcp_proc_t*, mca_ptl_peer_t*); int mca_ptl_tcp_proc_insert(mca_ptl_tcp_proc_t*, mca_ptl_peer_t*);
int mca_ptl_tcp_proc_remove(mca_ptl_tcp_proc_t*, mca_ptl_peer_t*); int mca_ptl_tcp_proc_remove(mca_ptl_tcp_proc_t*, mca_ptl_peer_t*);

Просмотреть файл

@ -12,6 +12,7 @@ noinst_LTLIBRARIES = libmpi_convenience.la
sources = \ sources = \
datatype/libmpi_datatype.la \ datatype/libmpi_datatype.la \
interface/libmpi_interface.la \ interface/libmpi_interface.la \
proc/libmpi_proc.la \
request/libmpi_request.la \ request/libmpi_request.la \
runtime/libmpi_runtime.la runtime/libmpi_runtime.la

Просмотреть файл

@ -5,11 +5,17 @@
include $(top_srcdir)/config/Makefile.options include $(top_srcdir)/config/Makefile.options
noinst_LTLIBRARIES = libmpi_proc.la
# Source code files # Source code files
headers = \ headers = \
proc.h proc.h
libmpi_proc_la_SOURCES = \
$(headers) \
proc.c
# Conditionally install the header files # Conditionally install the header files
if WANT_INSTALL_HEADERS if WANT_INSTALL_HEADERS

Просмотреть файл

@ -1,4 +1,10 @@
#include "proc.h" #include "lam/threads/mutex.h"
#include "mpi/proc/proc.h"
static lam_list_t lam_proc_list;
static lam_mutex_t lam_proc_lock;
lam_proc_t* lam_proc_self = 0;
lam_class_info_t lam_proc_cls = { lam_class_info_t lam_proc_cls = {
@ -7,18 +13,31 @@ lam_class_info_t lam_proc_cls = {
(class_init_t)lam_proc_init, (class_init_t)lam_proc_init,
(class_destroy_t)lam_proc_destroy (class_destroy_t)lam_proc_destroy
}; };
void lam_proc_init(lam_proc_t* proc) void lam_proc_init(lam_proc_t* proc)
{ {
static int init = 0;
if(init++ == 0) {
lam_list_init(&lam_proc_list);
lam_mutex_init(&lam_proc_lock);
}
SUPER_INIT(proc, &lam_list_cls); SUPER_INIT(proc, &lam_list_cls);
proc->proc_job_id = 0; proc->proc_job = 0;
proc->proc_vpid = 0; proc->proc_vpid = 0;
proc->proc_pml = 0; proc->proc_pml = 0;
THREAD_LOCK(&lam_proc_lock);
lam_list_append(&lam_proc_list, (lam_list_item_t*)proc);
THREAD_UNLOCK(&lam_proc_lock);
} }
void lam_proc_destroy(lam_proc_t* proc) void lam_proc_destroy(lam_proc_t* proc)
{ {
THREAD_LOCK(&lam_proc_lock);
lam_list_remove_item(&lam_proc_list, (lam_list_item_t*)proc);
THREAD_UNLOCK(&lam_proc_lock);
SUPER_DESTROY(proc, &lam_list_cls); SUPER_DESTROY(proc, &lam_list_cls);
} }

Просмотреть файл

@ -10,7 +10,6 @@
extern lam_class_info_t lam_proc_cls; extern lam_class_info_t lam_proc_cls;
extern lam_list_t lam_procs;
struct lam_proc_t { struct lam_proc_t {
@ -33,7 +32,12 @@ typedef struct lam_proc_t lam_proc_t;
void lam_proc_init(lam_proc_t*); void lam_proc_init(lam_proc_t*);
void lam_proc_destroy(lam_proc_t*); void lam_proc_destroy(lam_proc_t*);
lam_proc_t* lam_proc_local(void);
static inline lam_proc_t* lam_proc_local(void)
{
extern lam_proc_t* lam_proc_self;
return lam_proc_self;
}
#endif /* LAM_PROC */ #endif /* LAM_PROC */