telnet server and shared library loader enhancement
This commit is contained in:
@@ -1,9 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
/* FT NOKBLF:
|
/*! \file common/utils/load_module_shlib.c
|
||||||
* this source is to be linked with the program using the telnet server, it looks for
|
* \brief shared library loader implementation
|
||||||
* the telnet server dynamic library, possibly loads it and calls the telnet server
|
* \author Francois TABURET
|
||||||
* init functions
|
* \date 2017
|
||||||
*/
|
* \version 0.1
|
||||||
|
* \company NOKIA BellLabs France
|
||||||
|
* \email: francois.taburet@nokia-bell-labs.com
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -13,37 +38,71 @@
|
|||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include "openair1/PHY/defs.h"
|
#include "openair1/PHY/defs.h"
|
||||||
#define LOAD_MODULE_SHLIB_MAIN
|
#define LOAD_MODULE_SHLIB_MAIN
|
||||||
|
|
||||||
|
#include "common/config/config_userapi.h"
|
||||||
#include "load_module_shlib.h"
|
#include "load_module_shlib.h"
|
||||||
int load_module_shlib(char *modname)
|
void loader_init(void) {
|
||||||
|
paramdef_t LoaderParams[] = LOADER_PARAMS_DESC;
|
||||||
|
|
||||||
|
|
||||||
|
int ret = config_get( LoaderParams,sizeof(LoaderParams)/sizeof(paramdef_t),LOADER_CONFIG_PREFIX);
|
||||||
|
if (ret <0) {
|
||||||
|
fprintf(stderr,"[LOADER] configuration couldn't be performed");
|
||||||
|
if (loader_data.shlibpath == NULL) {
|
||||||
|
loader_data.shlibpath=DEFAULT_PATH;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int load_module_shlib(char *modname,loader_shlibfunc_t *farray, int numf)
|
||||||
{
|
{
|
||||||
void *lib_handle;
|
void *lib_handle;
|
||||||
initfunc_t fpi;
|
initfunc_t fpi;
|
||||||
char *tmpstr;
|
char *tmpstr;
|
||||||
int ret=0;
|
int ret=0;
|
||||||
|
|
||||||
tmpstr = malloc(strlen(modname)+16);
|
if (loader_data.shlibpath == NULL) {
|
||||||
|
loader_init();
|
||||||
|
}
|
||||||
|
tmpstr = malloc(strlen(loader_data.shlibpath)+strlen(modname)+16);
|
||||||
if (tmpstr == NULL) {
|
if (tmpstr == NULL) {
|
||||||
fprintf(stderr,"[LOADER] %s %d malloc error loading module %s, %s\n",__FILE__, __LINE__, modname, strerror(errno));
|
fprintf(stderr,"[LOADER] %s %d malloc error loading module %s, %s\n",__FILE__, __LINE__, modname, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
sprintf(tmpstr,"lib%s.so",modname);
|
|
||||||
|
if(loader_data.shlibpath[0] != 0) {
|
||||||
|
ret=sprintf(tmpstr,"%s/",loader_data.shlibpath);
|
||||||
|
}
|
||||||
|
if(strstr(modname,".so") == NULL) {
|
||||||
|
sprintf(tmpstr+ret,"lib%s.so",modname);
|
||||||
|
} else {
|
||||||
|
sprintf(tmpstr+ret,"%s",modname);
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
lib_handle = dlopen(tmpstr, RTLD_LAZY|RTLD_NODELETE|RTLD_GLOBAL);
|
lib_handle = dlopen(tmpstr, RTLD_LAZY|RTLD_NODELETE|RTLD_GLOBAL);
|
||||||
if (!lib_handle) {
|
if (!lib_handle) {
|
||||||
printf("[LOADER] library %s is not loaded: %s\n", tmpstr,dlerror());
|
fprintf(stderr,"[LOADER] library %s is not loaded: %s\n", tmpstr,dlerror());
|
||||||
ret = -1;
|
ret = -1;
|
||||||
} else {
|
} else {
|
||||||
sprintf(tmpstr,"init_%s",modname);
|
printf("[LOADER] library %s uccessfully loaded loaded\n", tmpstr);
|
||||||
|
sprintf(tmpstr,"%s_autoinit",modname);
|
||||||
fpi = dlsym(lib_handle,tmpstr);
|
fpi = dlsym(lib_handle,tmpstr);
|
||||||
|
|
||||||
if (fpi != NULL )
|
if (fpi != NULL )
|
||||||
{
|
{
|
||||||
fpi();
|
fpi();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
if (farray != NULL) {
|
||||||
fprintf(stderr,"[LOADER] %s %d %s function not found %s\n",__FILE__, __LINE__, dlerror(),tmpstr);
|
for (int i=0; i<numf; i++) {
|
||||||
ret = -1;
|
farray[i].fptr = dlsym(lib_handle,farray[i].fname);
|
||||||
}
|
if (farray[i].fptr == NULL ) {
|
||||||
|
fprintf(stderr,"[LOADER] %s %d %s function not found %s\n",__FILE__, __LINE__, dlerror(),farray[i].fname);
|
||||||
|
ret= -1;
|
||||||
|
}
|
||||||
|
} /* for int i... */
|
||||||
|
} /* farray ! NULL */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmpstr != NULL) free(tmpstr);
|
if (tmpstr != NULL) free(tmpstr);
|
||||||
|
|||||||
@@ -1,11 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file common/utils/load_module_shlib.h
|
||||||
|
* \brief include file for users of the shared lib loader
|
||||||
|
* \author Francois TABURET
|
||||||
|
* \date 2017
|
||||||
|
* \version 0.1
|
||||||
|
* \company NOKIA BellLabs France
|
||||||
|
* \email: francois.taburet@nokia-bell-labs.com
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
#ifndef LOAD_SHLIB_H
|
#ifndef LOAD_SHLIB_H
|
||||||
#define LOAD_SHLIB_H
|
#define LOAD_SHLIB_H
|
||||||
|
|
||||||
|
|
||||||
typedef int(*initfunc_t)(void);
|
typedef int(*initfunc_t)(void);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *shlibpath;
|
||||||
|
}loader_data_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *fname;
|
||||||
|
int (*fptr)(void);
|
||||||
|
}loader_shlibfunc_t;
|
||||||
#ifdef LOAD_MODULE_SHLIB_MAIN
|
#ifdef LOAD_MODULE_SHLIB_MAIN
|
||||||
|
#define LOADER_CONFIG_PREFIX "loader"
|
||||||
|
#define DEFAULT_PATH ""
|
||||||
|
loader_data_t loader_data;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* LOADER parameters */
|
||||||
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
|
/*--------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
#define LOADER_PARAMS_DESC { \
|
||||||
|
{"shlibpath", NULL, 0, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------*/
|
||||||
#else
|
#else
|
||||||
extern int load_module_shlib(char *modname);
|
extern int load_module_shlib(char *modname, loader_shlibfunc_t *farray, int numf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \file common/utils/telnetsrv.c
|
/*! \file common/utils/telnetsrv/telnetsrv.c
|
||||||
* \brief: implementation of a telnet server
|
* \brief: implementation of a telnet server
|
||||||
* \author Francois TABURET
|
* \author Francois TABURET
|
||||||
* \date 2017
|
* \date 2017
|
||||||
|
|||||||
@@ -1,3 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file common/utils/telnetsrv/telnetsrv.h
|
||||||
|
* \brief: include file for telnet server implementation
|
||||||
|
* \author Francois TABURET
|
||||||
|
* \date 2017
|
||||||
|
* \version 0.1
|
||||||
|
* \company NOKIA BellLabs France
|
||||||
|
* \email: francois.taburet@nokia-bell-labs.com
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
#ifndef TELNETSRV_H
|
#ifndef TELNETSRV_H
|
||||||
#define TELNETSRV_H
|
#define TELNETSRV_H
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file common/utils/telnetsrv/telnetsrv_phycmd.c
|
||||||
|
* \brief: implementation of telnet commands related to softmodem linux process
|
||||||
|
* \author Francois TABURET
|
||||||
|
* \date 2017
|
||||||
|
* \version 0.1
|
||||||
|
* \company NOKIA BellLabs France
|
||||||
|
* \email: francois.taburet@nokia-bell-labs.com
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
@@ -89,7 +120,7 @@ int dump_phyvars(char *buf, int debug, telnet_printfunc_t prnt)
|
|||||||
if (strcasestr(buf,"uedump") != NULL)
|
if (strcasestr(buf,"uedump") != NULL)
|
||||||
{
|
{
|
||||||
dump_uestats(debug, prnt,1);
|
dump_uestats(debug, prnt,1);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file common/utils/telnetsrv_proccmd.h
|
||||||
|
* \brief: Include file defining telnet commands related to softmodem linux process
|
||||||
|
* \author Francois TABURET
|
||||||
|
* \date 2017
|
||||||
|
* \version 0.1
|
||||||
|
* \company NOKIA BellLabs France
|
||||||
|
* \email: francois.taburet@nokia-bell-labs.com
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef TELNETSRV_PHYCMD_MAIN
|
#ifdef TELNETSRV_PHYCMD_MAIN
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.openairinterface.org/?page_id=698
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*-------------------------------------------------------------------------------
|
||||||
|
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
* contact@openairinterface.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*! \file common/utils/telnetsrv/telnetsrv_proccmd.c
|
||||||
|
* \brief: implementation of telnet commands related to this linux process
|
||||||
|
* \author Francois TABURET
|
||||||
|
* \date 2017
|
||||||
|
* \version 0.1
|
||||||
|
* \company NOKIA BellLabs France
|
||||||
|
* \email: francois.taburet@nokia-bell-labs.com
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \file common/utils/telnetsrv_proccmd.h
|
/*! \file common/utils/telnetsrv/telnetsrv_proccmd.h
|
||||||
* \brief: Include file defining telnet commands related to this linux process
|
* \brief: Include file defining telnet commands related to this linux process
|
||||||
* \author Francois TABURET
|
* \author Francois TABURET
|
||||||
* \date 2017
|
* \date 2017
|
||||||
|
|||||||
@@ -588,7 +588,7 @@ static void get_options(void) {
|
|||||||
set_glog(-1, glog_verbosity);
|
set_glog(-1, glog_verbosity);
|
||||||
}
|
}
|
||||||
if (start_telnetsrv) {
|
if (start_telnetsrv) {
|
||||||
load_module_shlib("telnetsrv");
|
load_module_shlib("telnetsrv",NULL,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user