d2b3e22a4e
This decouples the build and packaging of guest-server, guest-agent from mtce, by splitting guest component into stx-nfv repo. This leaves existing C++ code, scripts, and resource files untouched, so there is no functional change. Code refactoring is beyond the scope of this update. Makefiles were modified to include devel headers directories /usr/include/mtce-common and /usr/include/mtce-daemon. This ensures there is no contamination with other system headers. The cgts-mtce-common package is renamed and split into: - repo stx-metal: mtce-common, mtce-common-dev - repo stx-metal: mtce - repo stx-nfv: mtce-guest - repo stx-ha: updates package dependencies to mtce-pmon for service-mgmt, sm, and sm-api mtce-common: - contains common and daemon shared source utility code mtce-common-dev: - based on mtce-common, contains devel package required to build mtce-guest and mtce - contains common library archives and headers mtce: - contains components: alarm, fsmon, fsync, heartbeat, hostw, hwmon, maintenance, mtclog, pmon, public, rmon mtce-guest: - contains guest component guest-server, guest-agent Story: 2002829 Task: 22748 Depends-On: https://review.openstack.org/603435 Change-Id: I2ebaf07b94ee5b5abdf8f8db80536351ded22078 Signed-off-by: Jim Gauld <james.gauld@windriver.com>
231 lines
6.9 KiB
C++
231 lines
6.9 KiB
C++
#ifndef __INCLUDE_INSTBASECLASS_H__
|
|
#define __INCLUDE_INSTBASECLASS_H__
|
|
|
|
/*
|
|
* Copyright (c) 2013-2018 Wind River Systems, Inc.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* Wind River CGTS Platform Guest Services "Instances Base Class Header"
|
|
*/
|
|
|
|
#include <json-c/json.h>
|
|
#include "guestBase.h" /* for ... instInfo */
|
|
|
|
typedef enum
|
|
{
|
|
FSM_ACTION__NONE,
|
|
FSM_ACTION__CONNECT,
|
|
FSM_ACTION__LAST
|
|
|
|
} guest_fsmActions_enum ;
|
|
|
|
typedef enum
|
|
{
|
|
INST_CONNECT__START = 1,
|
|
INST_CONNECT__WAIT = 2,
|
|
INST_CONNECT__RETRY = 3,
|
|
INST_CONNECT__DONE = 4,
|
|
INST_CONNECT__STAGES = 5
|
|
} guest_connectStages_enum ;
|
|
|
|
typedef enum
|
|
{
|
|
INST_MONITOR__STEADY = 0,
|
|
INST_MONITOR__DELAY = 2,
|
|
INST_MONITOR__FAILURE = 1,
|
|
} guest_monitorStages_enum ;
|
|
|
|
|
|
typedef enum
|
|
{
|
|
INST_MESSAGE__RECEIVE = 0,
|
|
INST_MESSAGE__SEND_INIT_ACK = 1,
|
|
INST_MESSAGE__RESP_WAIT = 2, /* Waiting for heartbeat challenge response */
|
|
INST_MESSAGE__SEND_WAIT = 3, /* Waiting for period to expire for challenge resend */
|
|
INST_MESSAGE__TRANSMIT = 4,
|
|
INST_MESSAGE__STALL = 5
|
|
} guest_messageStages_enum ;
|
|
|
|
class guestInstClass
|
|
{
|
|
private:
|
|
struct inst {
|
|
|
|
/** Pointer to the previous / next host in the list */
|
|
struct inst * prev;
|
|
struct inst * next;
|
|
|
|
/* Instance info */
|
|
instInfo instance ;
|
|
|
|
/**
|
|
* Top level gate for the host.
|
|
* If false then reporting for all instances are off.
|
|
*/
|
|
// bool reporting;
|
|
|
|
bool query_flag ;
|
|
|
|
#define INST_TIMER_MONITOR (0)
|
|
#define INST_TIMER_CONNECT (1)
|
|
#define INST_TIMER_RECONNECT (2)
|
|
#define INST_TIMER_INIT (3)
|
|
#define INST_TIMER_VOTE (4)
|
|
#define INST_TIMER_MAX (5)
|
|
|
|
// number of continuous reads for an instance to deal with
|
|
// potential message burst
|
|
#define INST_MSG_READ_COUNT 5
|
|
|
|
/** General Purpose instance timer */
|
|
// struct mtc_timer timer;
|
|
struct mtc_timer vote_timer;
|
|
struct mtc_timer init_timer;
|
|
struct mtc_timer monitor_timer;
|
|
struct mtc_timer connect_timer;
|
|
struct mtc_timer reconnect_timer;
|
|
|
|
|
|
guest_connectStages_enum connectStage ;
|
|
guest_messageStages_enum messageStage ;
|
|
guest_monitorStages_enum monitorStage ;
|
|
|
|
guest_fsmActions_enum action ;
|
|
|
|
int monitor_handler_count ;
|
|
int message_handler_count ;
|
|
int connect_handler_count ;
|
|
int mismatch_count ;
|
|
int heartbeat_count ;
|
|
|
|
/* Message list for this instance*/
|
|
list<struct json_object *> message_list ;
|
|
};
|
|
|
|
struct inst * inst_head ; /**< Inst Linked List Head pointer */
|
|
struct inst * inst_tail ; /**< Inst Linked List Tail pointer */
|
|
|
|
/** List of allocated host memory.
|
|
*
|
|
* An array of host pointers.
|
|
*/
|
|
inst * inst_ptrs[MAX_HOSTS] ;
|
|
|
|
/** A memory allocation counter.
|
|
*
|
|
* Should represent the number of hosts in the linked list.
|
|
*/
|
|
int memory_allocs ;
|
|
|
|
/** A memory used counter
|
|
*
|
|
* A variable storing the accumulated instance memory
|
|
*/
|
|
int memory_used ;
|
|
|
|
bool fsm_exit ;
|
|
void fsm_run ( void );
|
|
|
|
struct guestInstClass::inst* newInst ( void );
|
|
struct guestInstClass::inst* addInst ( string uuid );
|
|
struct guestInstClass::inst* getInst ( string uuid );
|
|
int remInst ( string uuid );
|
|
int delInst ( struct guestInstClass::inst * inst_ptr );
|
|
void readInst ( void );
|
|
|
|
void print_all_instances ( void );
|
|
|
|
void mem_log_inst_info ( void );
|
|
|
|
struct guestInstClass::inst* getInst_timer ( timer_t tid, int timer_id );
|
|
|
|
int message_handler ( struct guestInstClass::inst * inst_ptr );
|
|
int connect_handler ( struct guestInstClass::inst * inst_ptr );
|
|
int monitor_handler ( struct guestInstClass::inst * inst_ptr );
|
|
|
|
void start_monitor_timer ( struct guestInstClass::inst * inst_ptr );
|
|
|
|
/** Thus member function loops over all the insances and sends
|
|
* a json string instances: [uuid:state],[uuid:state]...
|
|
* back to the guestAgent. */
|
|
int guestAgent_qry_handler ( void );
|
|
|
|
int send_challenge ( struct guestInstClass::inst * inst_ptr );
|
|
|
|
void manage_comm_loss ( void );
|
|
|
|
void mem_log_info ( void );
|
|
void process_msg(json_object *jobj_msg, struct guestInstClass::inst * inst_ptr);
|
|
void parser(char *buf, ssize_t len, json_tokener* tok, int newline_found, struct guestInstClass::inst * inst_ptr);
|
|
void handle_virtio_serial_msg(char *buf, ssize_t len, json_tokener* tok, struct guestInstClass::inst * inst_ptr);
|
|
|
|
public:
|
|
|
|
guestInstClass(); /**< constructor */
|
|
~guestInstClass(); /**< destructor */
|
|
|
|
bool reporting ;
|
|
void print_instances ( void );
|
|
|
|
/** handle an expired timer */
|
|
void timer_handler ( int sig, siginfo_t *si, void *uc);
|
|
|
|
struct mtc_timer search_timer;
|
|
|
|
int instances ;
|
|
void guest_fsm_run ( void );
|
|
|
|
int qry_inst ( void );
|
|
int add_inst ( string uuid, instInfo & instance );
|
|
int mod_inst ( string uuid, instInfo & instance );
|
|
int del_inst ( string uuid );
|
|
instInfo * get_inst ( string uuid );
|
|
|
|
ssize_t write_inst ( instInfo * ptr, const char *message, size_t size);
|
|
|
|
void reconnect_start ( const char * uuid_ptr ) ; // string uuid );
|
|
|
|
void set_query_flag ( string uuid );
|
|
bool get_query_flag ( string uuid );
|
|
bool get_reporting_state( string uuid );
|
|
int set_reporting_state( string uuid, bool enabled );
|
|
|
|
int send_vote_notify ( string uuid );
|
|
int send_vote_notify_resp ( char * hostname, string uuid,
|
|
string notification_type,
|
|
string event_type,
|
|
string vote_result,
|
|
string reject_reason);
|
|
|
|
void send_client_msg_nack ( instInfo * instInfo_ptr,
|
|
string log_err);
|
|
void handle_parse_failure ( struct guestInstClass::inst * inst_ptr,
|
|
const char *key,
|
|
struct json_object *jobj_msg);
|
|
|
|
/* Called on controlle daemon exit */
|
|
void free_instance_resources ( void );
|
|
void stop_instance_timers ( struct guestInstClass::inst * inst_ptr );
|
|
|
|
/* For select dispatch */
|
|
struct timeval waitd ;
|
|
|
|
fd_set inotify_readfds ;
|
|
fd_set instance_readfds ;
|
|
fd_set message_readfds ;
|
|
|
|
void memLogDelimit ( void ); /**< Debug log delimiter */
|
|
void memDumpNodeState ( string uuid );
|
|
void memDumpAllState ( void );
|
|
void print_node_info ( void ); /**< Print node info banner */
|
|
};
|
|
|
|
guestInstClass * get_instInv_ptr ( void );
|
|
|
|
#endif /* __INCLUDE_INSTBASECLASS_H__ */
|