trafodion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sure...@apache.org
Subject [36/50] [abbrv] incubator-trafodion git commit: Trafodion configuration API changes - new library files
Date Wed, 31 May 2017 18:47:37 GMT
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/sqliteconfig.h
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/sqliteconfig.h b/core/sqf/monitor/linux/sqliteconfig.h
new file mode 100644
index 0000000..fdf9e67
--- /dev/null
+++ b/core/sqf/monitor/linux/sqliteconfig.h
@@ -0,0 +1,133 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef SQLITECONFIG_H_
+#define SQLITECONFIG_H_
+
+#include <stdlib.h>
+#include <sqlite3.h>
+#include "trafconfig.h"
+
+#define MAX_PROCESS_PATH           256
+
+#define SQLITE_DB_ACCESS_ERROR     101900101
+
+class CSqliteConfig
+{
+public:
+
+    CSqliteConfig( void );
+    ~CSqliteConfig( void );
+
+    int         Close( void );
+    int         AddRegistryKey( const char *key );
+    int         AddRegistryProcess( const char *name );
+    int         AddRegistryClusterData( const char *key, const char *dataValue );
+    int         AddRegistryProcessData( const char *procName
+                                      , const char *key
+                                      , const char *dataValue );
+    int         AddUniqueString( int nid, int id, const char *uniqStr );
+    int         DeleteNodeData( int pnid );
+    int         DeleteUniqueString( int nid );
+    int         GetNode( int nid
+                       , node_configuration_t &nodeConfig );
+    int         GetNode( const char *name
+                       , node_configuration_t &nodeConfig );
+    int         GetNodes( int &count
+                        , int max
+                        , node_configuration_t nodeConfig[] );
+    int         GetPNode( int pnid
+                        , physical_node_configuration_t &pnodeConfig );
+    int         GetPNode( const char *name
+                        , physical_node_configuration_t &pnodeConfig );
+    int         GetSNodes( int &count
+                         , int max
+                         , physical_node_configuration_t pNodeConfig[] );
+    int         GetPersistProcess( const char *persistPrefix
+                                 , persist_configuration_t &persistConfig );
+    int         GetPersistProcessKeys( const char *persistProcessKeys );
+    int         GetRegistryClusterSet( int &count
+                                     , int max
+                                     , registry_configuration_t registryConfig[] );
+    int         GetRegistryProcessSet( int &count
+                                     , int max
+                                     , registry_configuration_t registryConfig[] );
+    int         GetUniqueString( int nid, int id, const char *uniqStr );
+    int         GetUniqueStringId( int nid
+                                 , const char *uniqStr
+                                 , int &id );
+    int         GetUniqueStringIdMax( int nid, int &id );
+    int         Initialize( void );
+    inline bool IsInitialized( void ) { return ( (db_ != NULL) ); }
+    int         SaveLNodeData( int nid
+                             , int pnid
+                             , int firstCore
+                             , int lastCore
+                             , int processors
+                             , int roles );
+    int         SavePNodeData( const char *name
+                             , int pnid
+                             , int excludedFirstCore
+                             , int excludedLastCore );
+    int         UpdatePNodeConfig( int pnid
+                                 , const char *name
+                                 , int excludedFirstCore
+                                 , int excludedLastCore );
+
+protected:
+private:
+    int  GetSNodeData( int pnid
+                     , const char *nodename
+                     , int excfirstcore
+                     , int exclastcore
+                     , physical_node_configuration_t &spareNodeConfig );
+    void SetLNodeData( int nid
+                     , int pnid
+                     , const char *nodename
+                     , int excfirstcore
+                     , int exclastcore
+                     , int firstcore
+                     , int lastcore
+                     , int processors
+                     , int roles 
+                     , node_configuration_t &nodeConfig );
+    void SetPNodeData( int pnid
+                     , const char *nodename
+                     , int excfirstcore
+                     , int exclastcore
+                     , physical_node_configuration_t &pnodeConfig );
+    int  SetPersistProcessData( const char *persistkey
+                              , const char *persistvalue
+                              , persist_configuration_t &persistConfig );
+    int  UpdatePNodeData( int pnid
+                        , const char *name
+                        , int excludedFirstCore
+                        , int excludedLastCore );
+
+    sqlite3   *db_;
+};
+
+
+#endif /* SQLITECONFIG_H_ */

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/trafconfig.cxx
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/trafconfig.cxx b/core/sqf/monitor/linux/trafconfig.cxx
new file mode 100644
index 0000000..f89eda1
--- /dev/null
+++ b/core/sqf/monitor/linux/trafconfig.cxx
@@ -0,0 +1,403 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+// 
+///////////////////////////////////////////////////////////////////////////////
+
+using namespace std;
+
+#include "sqliteconfig.h"
+#include "trafconfigtrace.h"
+#include "trafconfig.h"
+
+bool TcTraceEnabled = false;
+
+CTrafConfigTrace    TrafConfigTrace;
+CSqliteConfig       SqliteConfig;
+
+///////////////////////////////////////////////////////////////////////////////
+//  Trafodion Configuration
+///////////////////////////////////////////////////////////////////////////////
+
+TC_Export int tc_close( void )
+{
+    int rc = SqliteConfig.Close();
+
+    if (TcTraceEnabled)
+    {
+        TrafConfigTrace.TraceClose();
+    }
+
+    return( rc );
+}
+
+TC_Export const char *tc_errmsg( int err )
+{
+    switch (err)
+    {
+        case TCSUCCESS:
+            return "Successful operation";
+        case TCNOTIMPLEMENTED:
+            return "Not implemented";
+        case TCNOTINIT:
+            return "Database not open";
+        case TCALREADYINIT:
+            return "Database already opened";
+        case TCDBOPERROR:
+            return "Database operation failed";
+        case TCDBNOEXIST:
+            return "Database operation yielded non-existent data";
+        case TCDBTRUNCATE:
+            return "Database operation returned less data than available";
+        case TCDBCORRUPT:
+            return "Internal processing error or database corruption";
+        default:
+            break;
+    }
+    return "Error undefined!";
+}
+
+TC_Export int tc_initialize( bool traceEnabled )
+{
+    TcTraceEnabled = traceEnabled;
+    if (TcTraceEnabled)
+    {
+        TrafConfigTrace.TraceInit( TcTraceEnabled, "0", NULL );
+    }
+
+    int rc = SqliteConfig.Initialize();
+
+    return( rc );
+}
+
+
+TC_Export int tc_delete_node( int nid
+                            , const char *node_name )
+{
+    int rc = TCDBOPERROR;
+    node_configuration_t nodeConfig;
+
+    if (node_name)
+    {
+        rc = SqliteConfig.GetNode( node_name, nodeConfig );
+        if ( rc != TCSUCCESS)
+        {
+            return( rc );
+        }
+    }
+    else
+    {
+        rc = SqliteConfig.GetNode( nid, nodeConfig );
+        if ( rc != TCSUCCESS)
+        {
+            return( rc );
+        }
+    }
+
+    if ( nodeConfig.nid != -1)
+    {
+        rc = SqliteConfig.DeleteNodeData( nodeConfig.pnid );
+    }
+
+    return( rc );
+}
+
+TC_Export int tc_get_node( const char *node_name
+                         , node_configuration_t *node_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetNode( node_name, *node_config );
+
+    return( rc );
+}
+
+TC_Export int tc_put_node( node_configuration_t *node_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.SaveLNodeData( node_config->nid
+                                   , node_config->pnid
+                                   , node_config->first_core
+                                   , node_config->last_core
+                                   , node_config->processors
+                                   , node_config->roles );
+
+    return( rc );
+}
+
+TC_Export int tc_get_pnode( const char *node_name
+                          , physical_node_configuration_t *pnode_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetPNode( node_name, *pnode_config );
+
+    return( rc );
+}
+
+TC_Export int tc_put_pnode( physical_node_configuration_t *pnode_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.SavePNodeData( pnode_config->node_name
+                                   , pnode_config->pnid
+                                   , pnode_config->excluded_first_core
+                                   , pnode_config->excluded_last_core );
+
+    return( rc );
+}
+
+TC_Export int tc_get_nodes( int *count
+                          , int  max
+                          , node_configuration_t *node_config )
+{
+    int rc = TCDBOPERROR;
+
+    if ( node_config == NULL )
+    {
+        max = 0;
+    }
+
+    rc = SqliteConfig.GetNodes( *count, max, node_config );
+
+    return( rc );
+}
+
+TC_Export int tc_get_snodes( int *scount
+                           , int  max
+                           , physical_node_configuration_t *pnode_config )
+{
+    int rc = TCDBOPERROR;
+
+    if ( pnode_config == NULL )
+    {
+        max = 0;
+    }
+
+    rc = SqliteConfig.GetSNodes( *scount, max, pnode_config );
+
+    return( rc );
+}
+
+TC_Export int tc_delete_persist_keys( void )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //
+
+    return( rc );
+}
+
+TC_Export int tc_get_persist_keys( const char *persist_keys )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetPersistProcessKeys( persist_keys );
+
+    return( rc );
+}
+
+TC_Export int tc_put_persist_keys( const char *persist_keys )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //
+
+    return( rc );
+}
+
+TC_Export int tc_delete_persist_process( const char *persist_key_prefix )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //
+
+    return( rc );
+}
+
+TC_Export int tc_get_persist_process( const char *persist_key_prefix
+                                    , persist_configuration_t *persist_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetPersistProcess( persist_key_prefix, *persist_config );
+
+    return( rc );
+}
+
+TC_Export int tc_put_persist_process( const char *persist_key_prefix
+                                    , persist_configuration_t *persist_config )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //
+
+    return( rc );
+}
+
+TC_Export int tc_get_registry_cluster_set( int *count
+                                         , int  max
+                                         , registry_configuration_t *registry_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetRegistryClusterSet( *count, max, registry_config );
+
+    return( rc );
+}
+
+TC_Export int tc_get_registry_process_set( int *count
+                                         , int  max
+                                         , registry_configuration_t *registry_config )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetRegistryProcessSet( *count, max, registry_config );
+
+    return( rc );
+}
+
+TC_Export int tc_get_registry_key( const char *key )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //rc = SqliteConfig.GetRegistryKey( key );
+
+    return( rc );
+}
+
+TC_Export int tc_put_registry_key( const char *key )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.AddRegistryKey( key );
+
+    return( rc );
+}
+
+TC_Export int tc_get_registry_process( const char *process_name )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //rc = SqliteConfig.GetRegistryProcess( process_name );
+
+    return( rc );
+}
+
+TC_Export int tc_put_registry_process( const char *process_name )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.AddRegistryProcess( process_name );
+
+    return( rc );
+}
+
+TC_Export int tc_get_registry_cluster_data( const char *key
+                                          , const char *data )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //rc = SqliteConfig.GetRegistryClusterData( key, data );
+
+    return( rc );
+}
+
+TC_Export int tc_put_registry_cluster_data( const char *key
+                                          , const char *data )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.AddRegistryClusterData( key, data );
+
+    return( rc );
+}
+
+TC_Export int tc_get_registry_process_data( const char *process_name
+                                          , const char *key
+                                          , const char *data )
+{
+    int rc = TCNOTIMPLEMENTED;
+
+    //rc = SqliteConfig.GetRegistryProcessData( process_name, key, data );
+
+    return( rc );
+}
+
+TC_Export int tc_put_registry_process_data( const char *process_name
+                                          , const char *key
+                                          , const char *data )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.AddRegistryProcessData( process_name, key, data );
+
+    return( rc );
+}
+
+TC_Export int tc_delete_unique_strings( int nid )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.DeleteUniqueString( nid );
+
+    return( rc );
+}
+
+
+TC_Export int tc_get_unique_string( int nid, int id, const char *unique_string )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetUniqueString( nid, id, unique_string );
+
+    return( rc );
+}
+
+TC_Export int tc_put_unique_string( int nid, int id, const char *unique_string )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.AddUniqueString( nid, id, unique_string );
+
+    return( rc );
+}
+
+TC_Export int tc_get_unique_string_id( int nid, const char *unique_string, int *id )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetUniqueStringId( nid, unique_string, *id );
+
+    return( rc );
+}
+
+TC_Export int tc_get_unique_string_id_max( int nid, int *id )
+{
+    int rc = TCDBOPERROR;
+
+    rc = SqliteConfig.GetUniqueStringIdMax( nid, *id );
+
+    return( rc );
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/trafconfig.h
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/trafconfig.h b/core/sqf/monitor/linux/trafconfig.h
new file mode 100644
index 0000000..0ef0693
--- /dev/null
+++ b/core/sqf/monitor/linux/trafconfig.h
@@ -0,0 +1,286 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+********************************************************************/
+#ifndef TRAFCONFIG_H_
+#define TRAFCONFIG_H_
+
+//
+// On Windows, this would actually do something like:
+// #define TRAF_Export __declspec(dllexport)
+//
+#define TC_Export
+
+#ifdef USE_TRAFCONF_DIAGS
+#define TC_DIAG_UNUSED __attribute__((warn_unused_result))
+#else
+#define TC_DIAG_UNUSED
+#endif
+
+#ifdef USE_TRAFCONF_DEPRECATED
+#define TC_DIAG_DEPRECATED __attribute__((deprecated))
+#else
+#define TC_DIAG_DEPRECATED
+#endif
+
+#define TC_REGISTRY_KEY_MAX             64
+#define TC_REGISTRY_VALUE_MAX         4096
+#define TC_PERSIST_PROCESSOR_NAME_MAX  128
+#define TC_PERSIST_ROLES_MAX           128
+#define TC_PERSIST_KEY_MAX              64
+#define TC_PERSIST_VALUE_MAX            64
+#define TC_PERSIST_KEYS_VALUE_MAX     4096
+#define TC_NODES_MAX                   256
+#define TC_SPARE_NODES_MAX             256
+#define TC_UNIQUE_STRING_VALUE_MAX    4096
+
+#define PERSIST_PROCESS_KEYS       "PERSIST_PROCESS_KEYS"
+#define PERSIST_PROCESS_NAME_KEY   "PROCESS_NAME"
+#define PERSIST_PROCESS_TYPE_KEY   "PROCESS_TYPE"
+#define PERSIST_PROGRAM_NAME_KEY   "PROGRAM_NAME"
+#define PERSIST_REQUIRES_DTM       "REQUIRES_DTM"
+#define PERSIST_STDOUT_KEY         "STDOUT"
+#define PERSIST_RETRIES_KEY        "PERSIST_RETRIES"
+#define PERSIST_ZONES_KEY          "PERSIST_ZONES"
+
+enum TC_ERRORS {
+  TCSUCCESS = 0,        // Successful operation
+  TCNOTIMPLEMENTED = -1,// Not implemented
+  TCNOTINIT = -2,       // Database not open
+  TCALREADYINIT = -3,   // Database already opened
+  TCDBOPERROR = -4,     // Database operation failed
+  TCDBNOEXIST = -5,     // Database operation yielded non-existent data
+  TCDBTRUNCATE = -6,    // Database operation returned less data than available
+  TCDBCORRUPT = -7,     // Internal processing error or database corruption
+};
+
+typedef struct node_configuration_s
+{
+    int  nid;                                   // Node Id (logical)
+    int  pnid;                                  // Physical Node ID
+    char node_name[TC_PERSIST_PROCESSOR_NAME_MAX]; // hostname
+    int  excluded_first_core;                   // First or only core assigned
+    int  excluded_last_core;                    // Last core assigned or -1
+    int  first_core;                            // First or only core assigned
+    int  last_core;                             // Last core assigned or -1
+    int  processors;                            // Number logical processors
+    int  roles;                                 // Role assigment
+} node_configuration_t;
+
+typedef struct physical_node_configuration_s
+{
+    int  pnid;                                  // Physical Node ID
+    char node_name[TC_PERSIST_PROCESSOR_NAME_MAX]; // hostname
+    int  excluded_first_core;                   // First or only core assigned
+    int  excluded_last_core;                    // Last core assigned or -1
+    int  spare_count;                           // Number of entries in spare_pnid[]
+    int  spare_pnid[TC_SPARE_NODES_MAX];           // list of pnids for which this node can
be a spare 
+} physical_node_configuration_t;
+
+typedef struct registry_configuration_s
+{
+    char scope[TC_REGISTRY_KEY_MAX];
+    char key[TC_REGISTRY_KEY_MAX];
+    char value[TC_REGISTRY_VALUE_MAX];
+} registry_configuration_t;
+
+typedef struct persist_configuration_s
+{
+    char persist_prefix[TC_PERSIST_KEY_MAX]; // DTM, TMID, or ... (PERSIST_PROCESS_KEYS)
+    char process_name[TC_PERSIST_VALUE_MAX]; // Process name {<prefix>[<format>]}
+    char process_type[TC_PERSIST_VALUE_MAX]; // DTM, TMID, PERSIST, ...
+    char program_name[TC_PERSIST_VALUE_MAX]; // Program executable name (no path in name)
+    char std_out[TC_PERSIST_VALUE_MAX];      // STDOUT {<prefix>[<format>]}
+    bool requires_DTM;                       // True when process requires transaction support
+    int  persist_retries;                    // Process create retries
+    int  persist_window;                     // Process create retries window (seconds)
+    char persist_zones[TC_PERSIST_VALUE_MAX]; // Process creation zones {<format>}
+} persist_configuration_t;
+
+
+TC_Export int tc_close( void )
+TC_DIAG_UNUSED;
+
+TC_Export const char *tc_errmsg( int err )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_initialize( bool traceEnabled )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_delete_node( int nid
+                            , const char *node_name )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_get_node( const char *node_name
+                         , node_configuration_t *node_config )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_node( node_configuration_t *node_config )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_get_pnode( const char *node_name
+                          , physical_node_configuration_t *pnode_config )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_pnode( physical_node_configuration_t *pnode_config )
+TC_DIAG_UNUSED;
+
+//
+// Call this to get all configured logical nodes
+//
+// count:                   is number of node_config array entries returned
+// max:                     is size of the node_config array
+// node_config:             is array of logical node configuration entries
+//
+// if count would be greater than max, an error is returned
+// if node_config is null, max is ignored and
+//    number of node_config entries is returned in count
+//
+TC_Export int tc_get_nodes( int           *count
+                          , int            max
+                          , node_configuration_t *node_config )
+TC_DIAG_UNUSED;
+
+//
+// Call this to get all configured spare nodes
+//
+// count:                   is number of pnode_config array entries returned
+// max:                     is size of the pnode_config array
+// pnode_config:            is array of spare node configuration entries
+//
+// if count would be greater than max, an error is returned
+// if pnode_config is null, max is ignored and
+//    number of pnode_config array entries is returned in count
+//
+TC_Export int tc_get_snodes( int                 *count
+                           , int                  max
+                           , physical_node_configuration_t *pnode_config )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_delete_persist_keys( void )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_get_persist_keys( const char *persist_keys )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_persist_keys( const char *persist_keys )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_delete_persist_process( const char *persist_key_prefix )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_get_persist_process( const char *persist_key_prefix
+                                    , persist_configuration_t *persist_config )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_persist_process( const char *persist_key_prefix
+                                    , persist_configuration_t *persist_config )
+TC_DIAG_UNUSED;
+
+
+//
+// Call this to get all cluster scope configuration registry entries
+//
+// count:                   is number of registry_config array entries returned
+// max:                     is size of the registry_config array
+// registry_configuration:  is the array of cluster registry entries
+//
+// if count would be greater than max, an error is returned
+// if registry_config is null, max is ignored and
+//    number of registry entries is returned in count
+//
+TC_Export int tc_get_registry_cluster_set( int *count
+                                         , int  max
+                                         , registry_configuration_t *registry_config )
+TC_DIAG_UNUSED;
+
+//
+// Call this to get all process scope configuration registry entries
+//
+// count:                   is number of registry_config array entries returned
+// max:                     is size of the registry_config array
+// registry_configuration:  is the array of process registry entries
+//
+// if count would be greater than max, an error is returned
+// if registry_config is null, max is ignored and
+//    number of registry entries entries is returned in count
+//
+TC_Export int tc_get_registry_process_set( int *count
+                                         , int  max
+                                         , registry_configuration_t *registry_config )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_get_registry_key( const char *key )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_registry_key( const char *key )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_get_registry_process( const char *process_name )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_registry_process( const char *process_name )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_get_registry_cluster_data( const char *key
+                                          , const char *data )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_registry_cluster_data( const char *key
+                                          , const char *data )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_get_registry_process_data( const char *process_name
+                                          , const char *key
+                                          , const char *data )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_registry_process_data( const char *process_name
+                                          , const char *key
+                                          , const char *data )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_delete_unique_strings( int nid )
+TC_DIAG_UNUSED;
+
+TC_Export int tc_get_unique_string( int nid, int id, const char *unique_string );
+TC_DIAG_UNUSED;
+
+TC_Export int tc_put_unique_string( int nid, int id, const char *unique_string )
+TC_DIAG_UNUSED;
+
+
+TC_Export int tc_get_unique_string_id( int nid, const char *unique_string, int *id );
+TC_DIAG_UNUSED;
+
+TC_Export int tc_get_unique_string_id_max( int nid, int *id );
+TC_DIAG_UNUSED;
+
+#endif // TRAFCONFIG_H_

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/trafconfiglog.cxx
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/trafconfiglog.cxx b/core/sqf/monitor/linux/trafconfiglog.cxx
new file mode 100644
index 0000000..99b9183
--- /dev/null
+++ b/core/sqf/monitor/linux/trafconfiglog.cxx
@@ -0,0 +1,121 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+//
+///////////////////////////////////////////////////////////////////////////////
+
+//#include <iostream>
+
+using namespace std;
+
+#include <assert.h>
+#include <pthread.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <linux/unistd.h>
+#include "trafconfigtrace.h"
+#include "trafconfiglog.h"
+
+#define gettid() syscall(__NR_gettid)
+
+pthread_mutex_t       TcLogMutex = PTHREAD_MUTEX_INITIALIZER;
+
+const char *LogLevelStr( int severity )
+{
+    const char *str;
+
+    switch (severity)
+    {
+        case TC_LOG_EMERG:
+            str = "FATAL";
+            break;
+        case TC_LOG_ALERT:
+            str = "WARN";
+            break;
+        case TC_LOG_CRIT:
+            str = "FATAL";
+            break;
+        case TC_LOG_ERR:
+            str = "ERROR";
+            break;
+        case TC_LOG_WARNING:
+            str = "WARN";
+            break;
+        case TC_LOG_NOTICE:
+            str = "INFO";
+            break;
+        case TC_LOG_INFO:
+            str = "INFO";
+            break;
+        case TC_LOG_DEBUG:
+            str = "DEBUG";
+            break;
+        default:
+            str = "INFO";
+    }
+
+    return( str );
+}
+
+int TcLogWrite(int eventType, int severity, char *msg)
+{
+    int status;
+
+    char   eventTimeFmt[20];
+    struct timeval eventTime;
+
+    status = pthread_mutex_lock(&TcLogMutex);
+    assert(status == 0);
+
+    gettimeofday(&eventTime, NULL);
+    struct tm *ltime = localtime(&eventTime.tv_sec);
+    sprintf( eventTimeFmt
+           , "%04d-%02d-%02d %02d:%02d:%02d"
+           , ltime->tm_year+1900
+           , ltime->tm_mon+1
+           , ltime->tm_mday
+           , ltime->tm_hour
+           , ltime->tm_min
+           , ltime->tm_sec );
+
+    fprintf( stderr
+           , "%s,, %s, TRAFCONFIG,,, PIN: %u,,,, TID: %ld, Message ID: %d, %s\n"
+           , eventTimeFmt
+           , LogLevelStr(severity)
+           , getpid()
+           , gettid()
+           , eventType
+           , msg );
+
+    status = pthread_mutex_unlock(&TcLogMutex);
+    assert(status == 0);
+    
+    if (TcTraceSettings & TC_TRACE_LOG_MSG)
+    {
+        trace_printf("Log Event: %d, %s\n(%s)\n",
+                     eventType, LogLevelStr(severity), msg);
+    }
+
+    return(0);
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/trafconfiglog.h
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/trafconfiglog.h b/core/sqf/monitor/linux/trafconfiglog.h
new file mode 100644
index 0000000..f1817aa
--- /dev/null
+++ b/core/sqf/monitor/linux/trafconfiglog.h
@@ -0,0 +1,44 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef TRAFCONFIGLOG_H_
+#define TRAFCONFIGLOG_H_
+
+using namespace std;
+
+#define TC_LOG_BUF_SIZE 256
+
+#define TC_LOG_EMERG   0   /* system is unusable */
+#define TC_LOG_ALERT   1   /* action must be taken immediately */
+#define TC_LOG_CRIT    2   /* critical conditions */
+#define TC_LOG_ERR     3   /* error conditions */
+#define TC_LOG_WARNING 4   /* warning conditions */
+#define TC_LOG_NOTICE  5   /* normal but significant condition */
+#define TC_LOG_INFO    6   /* informational */
+#define TC_LOG_DEBUG   7   /* debug-level messages */
+
+int TcLogWrite(int event_type, int severity, char *evl_buf);
+
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/trafconfigtrace.cxx
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/trafconfigtrace.cxx b/core/sqf/monitor/linux/trafconfigtrace.cxx
new file mode 100644
index 0000000..170b446
--- /dev/null
+++ b/core/sqf/monitor/linux/trafconfigtrace.cxx
@@ -0,0 +1,349 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+// 
+///////////////////////////////////////////////////////////////////////////////
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+using namespace std;
+
+#include "trafconfigtrace.h"
+
+#define TC_PROCESS_PATH_MAX    256
+
+const char *CTrafConfigTrace::strTraceEnable_ = "TC_TRACE_ENABLE";
+const char *CTrafConfigTrace::strTraceFile_   = "TC_TRACE_FILE";
+const char *CTrafConfigTrace::strTraceFileFb_ = "TC_TRACE_FILE_FB";
+
+const CTrafConfigTrace::TraceArea_t CTrafConfigTrace::traceAreaList_[] =
+{ 
+    {"TC_TRACE_REQUEST",         TC_TRACE_REQUEST},
+    {"TC_TRACE_NODE",            TC_TRACE_NODE},
+    {"TC_TRACE_PERSIST",         TC_TRACE_PERSIST},
+    {"TC_TRACE_REGISTRY",        TC_TRACE_REGISTRY},
+    {"TC_TRACE_INIT",            TC_TRACE_INIT},
+    {"TC_TRACE_LOG_MSG",         TC_TRACE_LOG_MSG},
+    {"TC_TRACE_ENTRY_EXIT",      TC_TRACE_ENTRY_EXIT}
+};
+
+// Global trace flags
+long TcTraceSettings = 0;
+
+CTrafConfigTrace::CTrafConfigTrace() 
+                : tracingEnabled_(false)
+                , traceSettingsSaved_(0)
+                , traceFileFb_(0)
+                , traceFileBase_(NULL)
+{
+    numTraceAreas_ = sizeof(traceAreaList_)/sizeof(TraceArea_t);
+}
+
+const char *CTrafConfigTrace::GetEnvStr(const char *key)
+{
+    const char *value;
+    value = getenv(key);
+    return value;
+}
+
+void CTrafConfigTrace::GetEnvInt(const char *key, int &val)
+{
+    const char *p = GetEnvStr(key);
+    if (p != NULL)
+    {
+        val = atoi(p);
+    }
+}
+
+bool CTrafConfigTrace::GetEnvBool(const char *key)
+{
+    const char *p = GetEnvStr(key);
+    bool val = false;
+    if (p != NULL)
+    {
+        val = atoi(p);
+    }
+    return val;
+}
+
+void CTrafConfigTrace::TraceClose( void )
+{
+    trace_close();
+}
+
+void CTrafConfigTrace::TraceInit( bool traceEnabled
+                                , const char *traceLevel
+                                , const char *pfname)
+{
+    char trace_file_name[TC_PROCESS_PATH_MAX];
+    char hostname[TC_PROCESS_PATH_MAX];
+
+    tracingEnabled_ = traceEnabled;
+
+    if (gethostname(hostname,sizeof(hostname)) == -1)
+    {
+        sprintf( hostname,"TC");
+    }
+
+    // Format default trace file name and remove any existing trace file.
+    if( getenv("SQ_VIRTUAL_NODES") )
+    {
+        sprintf( trace_file_name,"%s/trafconfig.trace.%d.%s"
+               , getenv("MPI_TMPDIR")
+               , getpid()
+               , hostname);
+    }
+    else
+    {
+        sprintf( trace_file_name,"%s/trafconfig.trace.%s"
+               , getenv("MPI_TMPDIR")
+               , hostname);
+    }
+    
+    remove(trace_file_name);
+
+    if (pfname == NULL)
+    {   // Caller did not specify a trace file name, get name from
+        // environment variable if specified.
+        pfname = GetEnvStr(strTraceFile_);
+    }
+
+    if (pfname != NULL)
+    {   // User specified trace file name
+
+        // Save the base trace file name for possible use later
+        traceFileBase_ = new char[strlen(pfname) + 1];
+        strcpy(traceFileBase_, pfname);
+
+        if ((strcmp(pfname, "STDOUT") == 0)
+          || strcmp(pfname, "STDERR") == 0)
+        {
+            strcpy(trace_file_name, pfname);
+        }
+        else // Make user specified file name unique per node
+        {
+            sprintf(trace_file_name,"%s/%s.%d.%s"
+                    , getenv("MPI_TMPDIR")
+                    , pfname
+                    , getpid()
+                    , hostname);
+        }
+    }
+
+    // Get any trace settings that were specified via environment variables
+    const char *value;
+
+    for (int i=0; i<numTraceAreas_; i++)
+    {
+        value = getenv(traceAreaList_[i].id);
+        if (value != NULL)
+        {
+            if (atoi(value) != 0)
+                // set the enabled flag for this trace area
+                TcTraceSettings |= traceAreaList_[i].bitFlag;
+        }
+    }
+
+    // Get environment variable specifying whether tracing is enabled
+    tracingEnabled_ = GetEnvBool(strTraceEnable_);
+    // Get environment variable value for trace buffer size if specified
+    GetEnvInt(strTraceFileFb_, traceFileFb_);
+
+    // Convert the user specified trace level string to a number.  The
+    // number can be specified as a decimal, octal or hexadecimal
+    // constant.  Combine these flags with current TcTraceSettings that
+    // may have been set via environment variables.
+    long trace_flags;
+    trace_flags = strtol(traceLevel, NULL, 0);
+    if (errno != ERANGE)
+    {
+        TcTraceSettings |= trace_flags;
+    }
+
+    // If any trace settings were specified initialize the trace file
+    if (TcTraceSettings != 0 || tracingEnabled_)
+    {
+        traceSettingsSaved_ = TcTraceSettings;
+
+        if (pfname != NULL)
+        {
+            trace_init(trace_file_name,
+                       false,  // don't append pid to file name
+                       "trafconfig",  // prefix
+                       false);
+            if (traceFileFb_ > 0)
+            {
+                trace_set_mem(traceFileFb_);
+            }
+        }
+    }
+}
+
+
+void CTrafConfigTrace::TraceHelpBool( const char *key
+                                    , const char *value
+                                    , const char *key_cmp
+                                    , bool &value_ret )
+{
+    if ((key != NULL) && (strcasecmp(key, key_cmp) == 0))
+    {
+        value_ret = atoi(value);
+    }
+}
+
+void CTrafConfigTrace::TraceHelpInt( const char *key
+                                   , const char *value
+                                   , const char *key_cmp
+                                   , int &value_ret )
+{
+    if ((key != NULL) && (strcasecmp(key, key_cmp) == 0))
+    {
+        value_ret = atoi(value);
+    }
+}
+
+const char *CTrafConfigTrace::TraceHelpStr( const char *key
+                                          , const char *value
+                                          , const char *key_cmp )
+{
+    if ((key != NULL) && (strcasecmp(key, key_cmp) == 0))
+    {
+        return value;
+    }
+    return NULL;
+}
+
+
+void CTrafConfigTrace::TraceChange(const char *key, const char *value)
+{
+    bool trace_was_enabled = tracingEnabled_;
+    const char *pfname;
+    int  old_fb = traceFileFb_;
+
+    if (key == NULL)
+        return;
+
+    // Restore saved trace settings in case trace flags get modified
+    TcTraceSettings = traceSettingsSaved_;
+
+    // Compare the key with each of the trace flag strings.  When
+    // there is an equal compare, assign the value to the appropriate flag.
+    for (int i=0; i<numTraceAreas_; i++)
+    {
+        if (strcasecmp(key, traceAreaList_[i].id) == 0)
+        {
+            if (atoi(value) != 0)
+            {
+                // set the enabled flag for this trace area
+                TcTraceSettings |= traceAreaList_[i].bitFlag;
+            }
+            else // clear the enabled flag for this trace area
+            {
+                TcTraceSettings &= ~traceAreaList_[i].bitFlag;
+            }
+            break;
+        }
+    }
+    // Save current trace settings
+    traceSettingsSaved_ = TcTraceSettings;
+
+
+    // Check if tracing is being enabled/disabled
+    TraceHelpBool(key, value, strTraceEnable_, tracingEnabled_);
+    // Check if trace file buffer size is being specified
+    TraceHelpInt(key, value, strTraceFileFb_, traceFileFb_);
+
+    // Check if trace file base name is being specified
+    pfname = TraceHelpStr(key, value, strTraceFile_);
+    if (pfname != NULL)
+    {   // Save trace file base name
+        delete [] traceFileBase_;
+        traceFileBase_ = new char[strlen(pfname) + 1];
+        strcpy(traceFileBase_, pfname);
+    }
+
+    if (!trace_was_enabled && tracingEnabled_)
+    {
+        char fname[TC_PROCESS_PATH_MAX];
+        char hostname[TC_PROCESS_PATH_MAX];
+        if (gethostname(hostname,sizeof(hostname)) == -1)
+        {
+            sprintf( hostname,"TC");
+        }
+
+        // Formulate trace file name
+        if (traceFileBase_ != NULL)
+        {  // User specified trace file name
+            if ((strcmp(traceFileBase_, "STDOUT") == 0)
+                || strcmp(traceFileBase_, "STDERR") == 0)
+            {
+                strcpy(fname, traceFileBase_);
+            }
+            else 
+            {   // Make user specified file name unique per node
+                sprintf( fname,"%s/%s.%d.%s"
+                       , getenv("MPI_TMPDIR")
+                       , traceFileBase_
+                       , getpid()
+                       , hostname);
+            }
+        }
+        else
+        {   // No user specified trace file name, use default
+            if( getenv("SQ_VIRTUAL_NODES") )
+            {
+                sprintf( fname,"%s/trafconfig.trace.%d.%s"
+                       , getenv("MPI_TMPDIR")
+                       , getpid()
+                       , hostname);
+            }
+            else
+            {
+                sprintf( fname,"%s/trafconfig.trace.%s"
+                       , getenv("MPI_TMPDIR")
+                       , hostname);
+            }
+        }
+
+        // Tracing was disabled and is now enabled, initialize trace
+        trace_init(fname,
+                   false,  // don't append pid to file name
+                   hostname,  // prefix
+                   false);
+    }
+    if (trace_was_enabled && !tracingEnabled_)
+    {
+        // Tracing was enabled and now is disabled, flush trace.  Save
+        // current trace settings.
+        trace_flush();
+
+        TcTraceSettings = 0;
+    }
+
+    // If a new trace file buffer size was specified, set it
+    if ((traceFileFb_ > 0) && (old_fb != traceFileFb_))
+        trace_set_mem(traceFileFb_);
+}

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/fd1c115f/core/sqf/monitor/linux/trafconfigtrace.h
----------------------------------------------------------------------
diff --git a/core/sqf/monitor/linux/trafconfigtrace.h b/core/sqf/monitor/linux/trafconfigtrace.h
new file mode 100644
index 0000000..9a3d42b
--- /dev/null
+++ b/core/sqf/monitor/linux/trafconfigtrace.h
@@ -0,0 +1,103 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+//
+// 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.
+//
+// @@@ END COPYRIGHT @@@
+********************************************************************/
+#ifndef TRAFCONFIGTRACE_H_
+#define TRAFCONFIGTRACE_H_
+
+#include "seabed/trace.h"
+
+// All request processing
+#define TC_TRACE_REQUEST         0x00001
+// Node configuration processing
+#define TC_TRACE_NODE            0x00002
+// Persist configuration processing
+#define TC_TRACE_PERSIST         0x00004
+// Registry configuration processing
+#define TC_TRACE_REGISTRY        0x00008
+// Initialization/shutdown information
+#define TC_TRACE_INIT            0x00010
+// Event messages logged (error,informational,critical,etc.)
+#define TC_TRACE_LOG_MSG         0x00020
+// Entry and exit from methods/functions
+#define TC_TRACE_ENTRY_EXIT      0x00040
+
+#define TRACE_ENTRY \
+   if (TcTraceSettings & TC_TRACE_ENTRY_EXIT) trace_printf("%s@%d\n", method_name, __LINE__)
+
+#define TRACE_EXIT \
+   if (TcTraceSettings & TC_TRACE_ENTRY_EXIT) trace_printf("%s@%d - Exit\n", method_name,
__LINE__)
+
+extern long TcTraceSettings;
+
+class CTrafConfigTrace
+{
+public:
+    CTrafConfigTrace();
+    virtual ~CTrafConfigTrace() {}
+
+    void TraceChange( const char *key, const char *value );
+    void TraceClose( void );
+    void TraceInit( bool traceEnabled
+                  , const char *traceLevel
+                  , const char *pfname);
+
+private:
+
+    const char *GetEnvStr( const char *key );
+    void        GetEnvInt( const char *key, int &val );
+    bool        GetEnvBool( const char *key );
+    void        TraceHelpBool( const char *key
+                             , const char *value
+                             , const char *key_cmp
+                             , bool &value_ret );
+    void        TraceHelpInt( const char *key
+                            , const char *value
+                            , const char *key_cmp
+                            , int &value_ret );
+    const char *TraceHelpStr( const char *key
+                            , const char *value
+                            , const char *key_cmp );
+
+    // The number of trace areas held in "traceAreaList"
+    int   numTraceAreas_;
+    bool  tracingEnabled_;
+
+    // Save area for retaining prior trace settings if tracing is
+    // disabled.  These are used to restore the values when tracing
+    // is re-enabled.
+    long  traceSettingsSaved_;
+
+    // Optional size of trace file buffer.
+    int   traceFileFb_;
+    char *traceFileBase_;
+
+    // Array of strings defining various trace areas and the
+    // trace bit flag associated with that area
+    typedef struct {const char *id; long bitFlag;} TraceArea_t;
+    static const TraceArea_t traceAreaList_[];
+
+    static const char *strTraceEnable_;
+    static const char *strTraceFile_;
+    static const char *strTraceFileFb_;
+};
+
+#endif // TRAFCONFIG_H_



Mime
View raw message