mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-12-25 17:27:01 +00:00
Platform Manager Enhancements
- Run onlpd in platform manager mode. - onlpd service init. - Add onlpd service to rfs builds.
This commit is contained in:
@@ -26,6 +26,8 @@ packages:
|
||||
builds/onlp-platform-defaults/$BUILD_DIR/${TOOLCHAIN}/bin/libonlp-platform-defaults.so : $libdir/
|
||||
builds/onlpd/$BUILD_DIR/${TOOLCHAIN}/bin/onlpd : $bindir/
|
||||
|
||||
init: $ONL/packages/base/any/onlp/src/onlpd.init
|
||||
|
||||
changelog: Change changes changes.,
|
||||
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@ GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_CTOR_DTOR=1
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1
|
||||
GLOBAL_CFLAGS += -DONLP_CONFIG_API_LOCK_GLOBAL_SHARED=1
|
||||
GLOBAL_CFLAGS += -DONLP_CONFIG_INCLUDE_SHLOCK_GLOBAL_INIT=1
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_PVS_SYSLOG=1
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_DAEMONIZE=1
|
||||
|
||||
GLOBAL_CFLAGS += -fPIC
|
||||
GLOBAL_LINK_LIBS += -lpthread $(LIBONLP_PLATFORM) $(LIBONLP_PLATFORM_DEFAULTS)
|
||||
|
||||
@@ -40,8 +40,11 @@ LIBONLP_SO := ../onlp/$(BUILD_DIR)/bin/libonlp.so
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_AIM_MAIN_FUNCTION=onlpdump_main
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MAIN=1
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_DAEMONIZE=1
|
||||
GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_PVS_SYSLOG=1
|
||||
|
||||
GLOBAL_LINK_LIBS += $(LIBONLP_SO) -Wl,--unresolved-symbols=ignore-in-shared-libs
|
||||
GLOBAL_LINK_LIBS += -lpthread -lm
|
||||
GLOBAL_LINK_LIBS += -lpthread -lm -lrt
|
||||
|
||||
include $(BUILDER)/targets.mk
|
||||
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/************************************************************
|
||||
* <bsn.cl fy=2014 v=onl>
|
||||
*
|
||||
* Copyright 2014, 2015 Big Switch Networks, Inc.
|
||||
*
|
||||
*
|
||||
* Copyright 2014, 2015 Big Switch Networks, Inc.
|
||||
*
|
||||
* Licensed under the Eclipse 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.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*
|
||||
* </bsn.cl>
|
||||
************************************************************
|
||||
*
|
||||
@@ -96,12 +96,17 @@ int onlp_sys_vioctl(int code, va_list vargs);
|
||||
/**
|
||||
* @brief Start the platform management thread.
|
||||
*/
|
||||
int onlp_sys_platform_manage_start(void);
|
||||
int onlp_sys_platform_manage_start(int block);
|
||||
|
||||
/**
|
||||
* @brief Stop the platform management thread.
|
||||
*/
|
||||
int onlp_sys_platform_manage_stop(void);
|
||||
int onlp_sys_platform_manage_stop(int block);
|
||||
|
||||
/**
|
||||
* @brief Join the platform management thread.
|
||||
*/
|
||||
int onlp_sys_platform_manage_join(void);
|
||||
|
||||
/**
|
||||
* @brief Perform any pending platform management activities.
|
||||
|
||||
@@ -28,6 +28,10 @@
|
||||
#include <onlp/sys.h>
|
||||
#include <onlp/sfp.h>
|
||||
#include <sff/sff.h>
|
||||
#include <AIM/aim_log_handler.h>
|
||||
#include <syslog.h>
|
||||
|
||||
static void platform_manager_daemon__(const char* pidfile);
|
||||
|
||||
/**
|
||||
* Human-readable SFP inventory.
|
||||
@@ -165,10 +169,12 @@ onlpdump_main(int argc, char* argv[])
|
||||
int x = 0;
|
||||
int S = 0;
|
||||
int l = 0;
|
||||
int M = 0;
|
||||
char* pidfile = NULL;
|
||||
const char* O = NULL;
|
||||
const char* t = NULL;
|
||||
|
||||
while( (c = getopt(argc, argv, "srehdojmipxlSt:O:")) != -1) {
|
||||
while( (c = getopt(argc, argv, "srehdojmM:ipxlSt:O:")) != -1) {
|
||||
switch(c)
|
||||
{
|
||||
case 's': show=1; break;
|
||||
@@ -180,6 +186,7 @@ onlpdump_main(int argc, char* argv[])
|
||||
case 'o': o=1; break;
|
||||
case 'x': x=1; break;
|
||||
case 'm': m=1; break;
|
||||
case 'M': M=1; pidfile = optarg; break;
|
||||
case 'i': i=1; break;
|
||||
case 'p': p=1; show=-1; break;
|
||||
case 't': t = optarg; break;
|
||||
@@ -190,6 +197,11 @@ onlpdump_main(int argc, char* argv[])
|
||||
}
|
||||
}
|
||||
|
||||
if(M) {
|
||||
platform_manager_daemon__(pidfile);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if(help) {
|
||||
printf("Usage: %s [OPTIONS]\n", argv[0]);
|
||||
printf(" -d Use dump(). This is the default.\n");
|
||||
@@ -200,6 +212,7 @@ onlpdump_main(int argc, char* argv[])
|
||||
printf(" -x Dump Platform Info only.\n");
|
||||
printf(" -j Dump ONIE data in JSON format.\n");
|
||||
printf(" -m Run platform manager.\n");
|
||||
printf(" -M Run as platform manager daemon.\n");
|
||||
printf(" -i Iterate OIDs.\n");
|
||||
printf(" -p Show SFP presence.\n");
|
||||
printf(" -t <file> Decode TlvInfo data.\n");
|
||||
@@ -302,10 +315,10 @@ onlpdump_main(int argc, char* argv[])
|
||||
|
||||
if(m) {
|
||||
printf("Running the platform manager for 600 seconds...\n");
|
||||
onlp_sys_platform_manage_start();
|
||||
onlp_sys_platform_manage_start(0);
|
||||
sleep(600);
|
||||
printf("Stopping the platform manager.\n");
|
||||
onlp_sys_platform_manage_stop();
|
||||
onlp_sys_platform_manage_stop(1);
|
||||
}
|
||||
|
||||
if(p) {
|
||||
@@ -323,3 +336,75 @@ onlpdump_main(int argc, char* argv[])
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if AIM_CONFIG_INCLUDE_DAEMONIZE == 1
|
||||
|
||||
#include <AIM/aim_daemon.h>
|
||||
#include <AIM/aim_pvs_syslog.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
void
|
||||
sighandler__(int signal)
|
||||
{
|
||||
onlp_sys_platform_manage_stop(0);
|
||||
}
|
||||
|
||||
static void
|
||||
platform_manager_daemon__(const char* pidfile)
|
||||
{
|
||||
aim_pvs_t* aim_pvs_syslog = NULL;
|
||||
aim_daemon_restart_config_t rconfig;
|
||||
aim_daemon_config_t config;
|
||||
|
||||
memset(&config, 0, sizeof(config));
|
||||
aim_daemon_restart_config_init(&rconfig, 1, 1);
|
||||
AIM_BITMAP_CLR(&rconfig.signal_restarts, SIGTERM);
|
||||
AIM_BITMAP_CLR(&rconfig.exit_restarts, 0);
|
||||
rconfig.maximum_restarts=50;
|
||||
rconfig.pvs = NULL;
|
||||
config.wd = "/";
|
||||
|
||||
aim_daemonize(&config, &rconfig);
|
||||
aim_log_handler_basic_init_all("onlpd",
|
||||
"/var/log/onlpd.log",
|
||||
1024*1024,
|
||||
99);
|
||||
if(pidfile) {
|
||||
FILE* fp = fopen(pidfile, "w");
|
||||
if(fp == NULL) {
|
||||
int e = errno;
|
||||
aim_printf(aim_pvs_syslog, "fatal: open(%s): %s\n",
|
||||
pidfile, strerror(e));
|
||||
aim_printf(&aim_pvs_stderr, "fatal: open(%s): %s\n",
|
||||
pidfile, strerror(e));
|
||||
|
||||
/* Don't attempt restart */
|
||||
raise(SIGTERM);
|
||||
}
|
||||
fprintf(fp, "%d\n", getpid());
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
/** Signal handler for terminating the platform manager */
|
||||
signal(SIGTERM, sighandler__);
|
||||
|
||||
/** Start and block in platform manager. */
|
||||
onlp_sys_platform_manage_start(1);
|
||||
|
||||
/** Terminated via signal. Cleanup and exit. */
|
||||
onlp_sys_platform_manage_stop(1);
|
||||
|
||||
aim_log_handler_basic_denit_all();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
static void
|
||||
platform_manager_daemon__(const char* pidfile)
|
||||
{
|
||||
fprintf(stderr, "Daemon mode not supported in this build.");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -228,7 +228,7 @@ onlp_sys_platform_manage_thread__(void* vctrl)
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sys_platform_manage_start(void)
|
||||
onlp_sys_platform_manage_start(int block)
|
||||
{
|
||||
onlp_sys_platform_manage_init();
|
||||
|
||||
@@ -250,22 +250,39 @@ onlp_sys_platform_manage_start(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(block) {
|
||||
onlp_sys_platform_manage_join();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sys_platform_manage_stop(void)
|
||||
onlp_sys_platform_manage_stop(int block)
|
||||
{
|
||||
if(control__.eventfd > 0) {
|
||||
uint64_t zero = 1;
|
||||
/* Tell the thread to exit */
|
||||
write(control__.eventfd, &zero, sizeof(zero));
|
||||
/* Wait for the thread to terminate */
|
||||
pthread_join(control__.thread, NULL);
|
||||
|
||||
if(block) {
|
||||
onlp_sys_platform_manage_join();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sys_platform_manage_join(void)
|
||||
{
|
||||
if(control__.eventfd > 0) {
|
||||
/* Wait for the thread to terminate */
|
||||
pthread_join(control__.thread, NULL);
|
||||
close(control__.eventfd);
|
||||
control__.eventfd = -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
platform_psus_notify__(void)
|
||||
|
||||
Reference in New Issue
Block a user