Merge "IPACM: support QXDM diag via socket"
diff --git a/ipacm/inc/IPACM_Log.h b/ipacm/inc/IPACM_Log.h
index c54d05b..d468f96 100644
--- a/ipacm/inc/IPACM_Log.h
+++ b/ipacm/inc/IPACM_Log.h
@@ -50,23 +50,31 @@
#include <string.h>
#include <syslog.h>
-#define PERROR(fmt) printf("%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
+#define MAX_BUF_LEN 256
+#define IPACMLOG_FILE "/etc/ipacm_log_file"
+
+typedef struct ipacm_log_buffer_s {
+ char user_data[MAX_BUF_LEN];
+} ipacm_log_buffer_t;
+
+void ipacm_log_send( void * user_data);
+
+static char buffer_send[MAX_BUF_LEN];
+
+#define PERROR(fmt) memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+ snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
+ ipacm_log_send (buffer_send); \
perror(fmt);
-#define IPACMERR(fmt, ...) syslog(LOG_ERR, "ERROR: %s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
- printf("ERR: %s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-
-#ifdef DEBUG
-#define IPACMDBG(fmt, ...) syslog(LOG_DEBUG, "%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
- printf("%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);
-
-#define IPACMLOG(fmt, ...) syslog(LOG_DEBUG, fmt, ##__VA_ARGS__);\
- printf(fmt, ##__VA_ARGS__);
-#else
-#define IPACMDBG(fmt, ...)
-#define IPACMLOG(fmt, ...)
-#endif
-
+#define IPACMERR(fmt, ...) memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+ snprintf(buffer_send,MAX_BUF_LEN,"ERR: %s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+ ipacm_log_send (buffer_send);
+#define IPACMDBG(fmt, ...) memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+ snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s() " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);\
+ ipacm_log_send (buffer_send);
+#define IPACMLOG(fmt, ...) memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+ snprintf(buffer_send,MAX_BUF_LEN, fmt, ##__VA_ARGS__);\
+ ipacm_log_send (buffer_send);
#ifdef __cplusplus
}
diff --git a/ipacm/src/IPACM_Log.cpp b/ipacm/src/IPACM_Log.cpp
index 72f71c5..20dd26c 100644
--- a/ipacm/src/IPACM_Log.cpp
+++ b/ipacm/src/IPACM_Log.cpp
@@ -40,10 +40,68 @@
#include "IPACM_Log.h"
#include <stdlib.h>
#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <asm/types.h>
+#include <linux/if.h>
+#include <sys/un.h>
+#include <errno.h>
+#include <IPACM_Defs.h>
void logmessage(int log_level)
{
return;
}
+/* start IPACMDIAG socket*/
+int create_socket(unsigned int *sockfd)
+{
+ if ((*sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) == IPACM_FAILURE)
+ {
+ perror("Error creating ipacm_log socket\n");
+ return IPACM_FAILURE;
+ }
+
+ if(fcntl(*sockfd, F_SETFD, FD_CLOEXEC) < 0)
+ {
+ perror("Couldn't set ipacm_log Close on Exec\n");
+ }
+
+ return IPACM_SUCCESS;
+}
+
+void ipacm_log_send( void * user_data)
+{
+ ipacm_log_buffer_t ipacm_log_buffer;
+ int numBytes=0, len;
+ struct sockaddr_un ipacmlog_socket;
+ static unsigned int ipacm_log_sockfd = 0;
+
+ if(ipacm_log_sockfd == 0)
+ {
+ /* start ipacm_log socket */
+ if(create_socket(&ipacm_log_sockfd) < 0)
+ {
+ printf("unable to create ipacm_log socket\n");
+ return;
+ }
+ printf("create ipacm_log socket successfully\n");
+ }
+ ipacmlog_socket.sun_family = AF_UNIX;
+ strcpy(ipacmlog_socket.sun_path, IPACMLOG_FILE);
+ len = strlen(ipacmlog_socket.sun_path) + sizeof(ipacmlog_socket.sun_family);
+
+ memcpy(ipacm_log_buffer.user_data, user_data, MAX_BUF_LEN);
+
+ //printf("send : %s\n", ipacm_log_buffer.user_data);
+ if ((numBytes = sendto(ipacm_log_sockfd, (void *)&ipacm_log_buffer, sizeof(ipacm_log_buffer.user_data), 0,
+ (struct sockaddr *)&ipacmlog_socket, len)) == -1)
+ {
+ printf("Send Failed(%d) %s \n",errno,strerror(errno));
+ return;
+ }
+ return;
+}