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\