1. adding sys log support
2. added dynamic enabled/disable file/sys log
3. added circular file log
Change-Id: I9f7de1779239d0617b6b171e3a4e40d439711185
diff --git a/ipacm/inc/IPACM_Conntrack_NATApp.h b/ipacm/inc/IPACM_Conntrack_NATApp.h
index 682316f..777a23f 100644
--- a/ipacm/inc/IPACM_Conntrack_NATApp.h
+++ b/ipacm/inc/IPACM_Conntrack_NATApp.h
@@ -67,7 +67,7 @@
int n =0; \
n = snprintf(log_buf, sizeof(log_buf), "%s:%d %s() %s", __FILE__, __LINE__, __FUNCTION__, "Error:");\
snprintf((log_buf+n), (sizeof(log_buf)-n)-1, "Invalid table handle\n");\
- logmessage(log_buf);\
+ logmessage(log_buf, LOG_ERR);\
}
class NatApp
@@ -103,6 +103,7 @@
static NatApp* GetInstance();
int AddTable(uint32_t);
+ uint32_t GetTableHdl(uint32_t);
int DeleteTable(uint32_t);
int AddEntry(const nat_table_entry *);
diff --git a/ipacm/inc/IPACM_Log.h b/ipacm/inc/IPACM_Log.h
index 785b654..f75e73c 100644
--- a/ipacm/inc/IPACM_Log.h
+++ b/ipacm/inc/IPACM_Log.h
@@ -48,6 +48,7 @@
#include <stdio.h>
#include <string.h>
+#include <syslog.h>
#define LOG_SIZE 200
@@ -58,7 +59,7 @@
int n =0; \
n = snprintf(log_buf, sizeof(log_buf), "%s:%d %s() ", __FILE__, __LINE__, __FUNCTION__);\
snprintf((log_buf+n), (sizeof(log_buf)-n-1), fmt, ##__VA_ARGS__);\
- logmessage(log_buf);\
+ logmessage(log_buf, LOG_DEBUG);\
}
@@ -66,10 +67,10 @@
int n =0; \
n = snprintf(log_buf, sizeof(log_buf), "%s:%d %s() %s", __FILE__, __LINE__, __FUNCTION__, "Error:");\
snprintf((log_buf+n), (sizeof(log_buf)-n-1), fmt, ##__VA_ARGS__);\
- logmessage(log_buf);\
+ logmessage(log_buf, LOG_ERR);\
}
-extern void logmessage(char *msg);
+extern void logmessage(char *msg, int log_level);
extern char log_buf[LOG_SIZE];
#ifdef __cplusplus
diff --git a/ipacm/src/IPACM_Conntrack_NATApp.cpp b/ipacm/src/IPACM_Conntrack_NATApp.cpp
index 9c14004..28de036 100644
--- a/ipacm/src/IPACM_Conntrack_NATApp.cpp
+++ b/ipacm/src/IPACM_Conntrack_NATApp.cpp
@@ -608,5 +608,13 @@
return -1;
}
+uint32_t NatApp::GetTableHdl(uint32_t in_ip_addr)
+{
+ if(in_ip_addr == pub_ip_addr)
+ {
+ return nat_table_hdl;
+ }
+ return -1;
+}
diff --git a/ipacm/src/IPACM_Log.cpp b/ipacm/src/IPACM_Log.cpp
index 3333358..74ae2aa 100644
--- a/ipacm/src/IPACM_Log.cpp
+++ b/ipacm/src/IPACM_Log.cpp
@@ -39,30 +39,91 @@
*/
#include "IPACM_Log.h"
#include <stdlib.h>
+#include <unistd.h>
+/* write logging to a local file */
+#define LOG_USE_FILE "/etc/IPACM_LOG_F"
#define FILE_NAME "/usr/ipacm_log.txt"
-static FILE *fp = NULL;
+/* To use syslog for logging and
+ use logread cmd to read */
+#define LOG_USE_SYS "/etc/IPACM_LOG_S"
+
+/* Maximum log file size. 1MB(1048576) */
+#define MAX_LOG_FILE_SIZE (1048576ul/4)
+
char log_buf[LOG_SIZE];
-void logmessage(char *msg)
+void logmessage(char *msg, int log_level)
{
+#ifdef DEBUG
+ static FILE *fp = NULL;
+ static bool is_sys_log_open = false;
+ static bool dft_syslog = false;
+ int log_sys = 0, log_file = 0;
+
printf("%s\n", msg);
-#if 0
- if(fp == NULL)
+
+ if(dft_syslog == false)
{
- fp = fopen(FILE_NAME, "wb+");
- if(fp == NULL)
- {
- printf("unable to open file\n");
- return;
- }
+ /* By Default sys log is open */
+ fp = fopen(LOG_USE_SYS, "w+");
+ if(fp != NULL)
+ {
+ dft_syslog = true;
+ fclose(fp);
+ fp = NULL;
+ }
}
- fprintf(fp, msg);
- fflush(fp);
+ if(access(LOG_USE_SYS, F_OK) != -1 )
+ {
+ log_sys = 1;
+ }
+ else if(access(LOG_USE_FILE, F_OK) != -1)
+ {
+ log_file = 1;
+ }
+ else
+ {
+ log_sys = 0;
+ log_file = 0;
+ }
+
+ if(log_sys)
+ {
+ if(is_sys_log_open == false)
+ {
+ setlogmask(LOG_UPTO(LOG_DEBUG));
+ openlog("IPACM", LOG_PID, LOG_LOCAL0);
+
+ is_sys_log_open = true;
+ }
+ syslog(log_level, msg);
+ }
+ else if(log_file)
+ {
+ if(fp == NULL)
+ {
+ fp = fopen(FILE_NAME, "w+");
+ if(fp == NULL)
+ {
+ printf("unable to open file\n");
+ return;
+ }
+ }
+
+ if(ftell(fp) > MAX_LOG_FILE_SIZE)
+ {
+ rewind(fp);
+ fprintf(fp, "====Rewinding=====\n");
+ }
+
+ fprintf(fp, msg);
+ fflush(fp);
+ }
#endif
- return;
+ return;
}
diff --git a/ipacm/src/Makefile.am b/ipacm/src/Makefile.am
index c43343a..57e3386 100644
--- a/ipacm/src/Makefile.am
+++ b/ipacm/src/Makefile.am
@@ -1,8 +1,8 @@
-EXTRA_CPPFLAGS = -DDEBUG
AM_CPPFLAGS = -I./../inc \
-I$(top_srcdir)/ipanat/inc \
${LIBXML_CFLAGS}
AM_CPPFLAGS += -Wall -Wundef -Wno-trigraphs
+AM_CPPFLAGS += -DDEBUG
ipacm_SOURCES = IPACM_Main.cpp \
IPACM_Conntrack_NATApp.cpp\