1
1
Files
zyxel-vmg8825_b50b-cfw/package/public-zyxel/libzyutil/patches/010-ENHANCE_tr143_diagnostics.patch
T
2026-04-17 18:33:03 +02:00

377 lines
10 KiB
Diff

Index: libzyutil-1.0/Makefile
===================================================================
--- libzyutil-1.0.orig/Makefile 2015-02-26 21:59:52.303409510 +0800
+++ libzyutil-1.0/Makefile 2015-02-26 21:59:52.343409511 +0800
@@ -21,7 +21,7 @@
endif
ZCFLAGS += -DZYXEL=1 -std=gnu99
-LIB_OBJS = common.o flash.o
+LIB_OBJS = common.o flash.o skconn.o
.PHONY : libzyutil
Index: libzyutil-1.0/skconn.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ libzyutil-1.0/skconn.c 2015-02-26 22:00:26.727403400 +0800
@@ -0,0 +1,324 @@
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <time.h>
+
+#include "zcfg_common.h"
+#include "zcfg_debug.h"
+#include "zyutil.h"
+
+#define TIME_STAMP_DATA_SIZE 32
+
+
+unsigned int zyUtilComputeMicroInterval(struct timeval *sTm, struct timeval *nTm)
+{
+ time_t sec = 0;
+ suseconds_t ms;
+ long long msec = 0;
+ unsigned int max;
+
+ if(!nTm || !sTm) return 0;
+ if(sTm->tv_sec > nTm->tv_sec) {
+ return 0;
+ }
+
+ sec = nTm->tv_sec - sTm->tv_sec;
+ if(sec == 0) {
+ if(sTm->tv_usec > nTm->tv_usec) {
+ return 0;
+ }
+ msec = nTm->tv_usec - sTm->tv_usec;
+ }else {
+ msec = sec * 1000000;
+ memset(&ms, 0xff, sizeof(ms));
+ msec += ms-sTm->tv_usec;
+ msec += nTm->tv_usec;
+ }
+ memset(&max, 0xff, sizeof(max));
+
+ if(msec > (long long)max) {
+ msec = msec - max;
+ memcpy(sTm, nTm, sizeof(struct timeval));
+ }
+
+ return (unsigned int)msec;
+
+}
+
+void zyUtilMakeTimeStamp(struct timeval *tv, char *timeStamp, unsigned int timeStampSz)
+{
+ struct tm *gmtm = NULL;
+ unsigned int outputTmSpLen = 0;
+ char tmsp[TIME_STAMP_DATA_SIZE+10] = {0};
+
+ if(!tv) return;
+
+ //year-mon-day,time,usec
+ if(!timeStampSz) return;
+
+ gmtm = gmtime((const time_t *)&tv->tv_sec);
+ sprintf(tmsp, "%d-%02d-%02dT%02d:%02d:%02d.%ld", (gmtm->tm_year+1900), (gmtm->tm_mon+1),
+ gmtm->tm_mday, gmtm->tm_hour, gmtm->tm_min, gmtm->tm_sec, (long)tv->tv_usec);
+ outputTmSpLen = ((timeStampSz-1) < strlen(tmsp)) ? (timeStampSz-1) : strlen(tmsp);
+ strncpy(timeStamp, tmsp, outputTmSpLen);
+ timeStamp[outputTmSpLen] = '\0';
+}
+
+/*
+ while domain is AF_UNIX, 'addr' is path name and 'port' could ignore
+ 'skconn' must not assign NULL
+*/
+int zyUtilTcpSvrInit(const int domain, const char *addr, const int port, skconn_t *skconn)
+{
+ int st = 0;
+ int len, rt = 0;
+
+ printf("%s\n", __FUNCTION__);
+
+ if(!addr || !skconn) {
+ return -1;
+ }
+
+ if ((st = socket(domain, SOCK_STREAM, 0)) < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "%s: create message socket error \n", __FUNCTION__);
+ return 0;
+ }
+
+ memset(skconn, 0, sizeof(skconn_t));
+ skconn->domain = domain;
+ if(domain == AF_UNIX) {
+ struct sockaddr_un svrAddr;
+
+ memset(&svrAddr, 0, sizeof(struct sockaddr_un));
+ svrAddr.sun_family = AF_UNIX;
+ if(strlen(addr) > sizeof(svrAddr.sun_path)) {
+ close(st);
+ return -1;
+ }
+ strcpy(svrAddr.sun_path, addr);
+ unlink(addr);
+ len = sizeof(svrAddr.sun_family) + strlen(svrAddr.sun_path);
+ rt = bind(st, (struct sockaddr*)&svrAddr, len);
+ }else if(domain == AF_INET) {
+ struct sockaddr_in svrSkAddr;
+ struct in_addr addrn;
+
+ memset(&svrSkAddr, 0, sizeof(struct sockaddr_in));
+ svrSkAddr.sin_family = AF_INET;
+ inet_aton(addr, &addrn);
+ svrSkAddr.sin_addr.s_addr = skconn->ip = addrn.s_addr;
+ skconn->port = port;
+ svrSkAddr.sin_port = htons(port);
+ len = sizeof(struct sockaddr);
+ rt = bind(st, (struct sockaddr*)&svrSkAddr, len);
+ }else {
+ close(st);
+ return -1;
+ }
+ skconn->st = st;
+ skconn->type = SOCK_STREAM;
+
+ if (rt < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "bind message socket error !!");
+ close(st);
+ return -1;
+ }
+
+ if (listen(st, TCP_BACKLOG) < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "listen message socket error !!");
+ close(st);
+ return -1;
+ }
+
+ return 1;
+}
+
+int zyUtilTcpConnInit(const int domain, const char *addr, const int port, skconn_t *skconn)
+{
+ int st;
+ int len, rt = 0;
+
+ printf("%s\n", __FUNCTION__);
+
+ if(!addr || !skconn) {
+ return -1;
+ }
+
+ if ((st = socket(domain, SOCK_STREAM, 0)) < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "%s: create message socket error \n", __FUNCTION__);
+ return 0;
+ }
+
+ memset(skconn, 0, sizeof(skconn_t));
+ skconn->domain = domain;
+ if(domain == AF_UNIX) {
+ struct sockaddr_un svrAddr;
+
+ memset(&svrAddr, 0, sizeof(struct sockaddr_un));
+ svrAddr.sun_family = AF_UNIX;
+ if(strlen(addr) > sizeof(svrAddr.sun_path)) {
+ close(st);
+ return -1;
+ }
+ strcpy(svrAddr.sun_path, addr);
+ len = sizeof(svrAddr.sun_family) + strlen(svrAddr.sun_path);
+
+ rt = connect(st, (struct sockaddr*)&svrAddr, len);
+ }else if(domain == AF_INET) {
+ struct sockaddr_in svrSkAddr;
+ struct in_addr addrn;
+
+ memset(&svrSkAddr, 0, sizeof(struct sockaddr_in));
+ svrSkAddr.sin_family = AF_INET;
+ inet_aton(addr, &addrn);
+ svrSkAddr.sin_addr.s_addr = skconn->ip = addrn.s_addr;
+ skconn->port = port;
+ svrSkAddr.sin_port = htons(port);
+ len = sizeof(struct sockaddr);
+
+ rt = connect(st, (struct sockaddr*)&svrSkAddr, len);
+ }else {
+ close(st);
+ return -1;
+ }
+ skconn->st = st;
+ skconn->type = SOCK_STREAM;
+
+ if(rt < 0)
+ {
+ zcfgLog(ZCFG_LOG_INFO, "connect failed!!");
+ close(st);
+ return -1;
+ }
+
+ return 1;
+}
+
+/*
+ while domain is AF_UNIX, 'addr' is path name and 'port' could ignore
+ 'skconn' must not assign NULL
+*/
+int zyUtilUdpSvrInit(const int domain, const char *addr, const int port, skconn_t *skconn)
+{
+ int st = 0;
+ int len, rt = 0;
+
+ printf("%s\n", __FUNCTION__);
+
+ if(!addr || !skconn) {
+ return -1;
+ }
+
+ if ((st = socket(domain, SOCK_DGRAM, 0)) < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "%s: create message socket error \n", __FUNCTION__);
+ return 0;
+ }
+
+ memset(skconn, 0, sizeof(skconn_t));
+ skconn->domain = domain;
+ if(domain == AF_UNIX) {
+ struct sockaddr_un svrAddr;
+
+ memset(&svrAddr, 0, sizeof(struct sockaddr_un));
+ svrAddr.sun_family = AF_UNIX;
+ if(strlen(addr) > sizeof(svrAddr.sun_path)) {
+ close(st);
+ return -1;
+ }
+ strcpy(svrAddr.sun_path, addr);
+ unlink(addr);
+ len = sizeof(svrAddr.sun_family) + strlen(svrAddr.sun_path);
+ rt = bind(st, (struct sockaddr*)&svrAddr, len);
+ }else if(domain == AF_INET) {
+ struct sockaddr_in svrSkAddr;
+ struct in_addr addrn;
+
+ memset(&svrSkAddr, 0, sizeof(struct sockaddr_in));
+ svrSkAddr.sin_family = AF_INET;
+ inet_aton(addr, &addrn);
+ svrSkAddr.sin_addr.s_addr = skconn->ip = addrn.s_addr;
+ skconn->port = port;
+ svrSkAddr.sin_port = htons(port);
+ len = sizeof(struct sockaddr);
+ rt = bind(st, (struct sockaddr*)&svrSkAddr, len);
+ }else {
+ close(st);
+ return -1;
+ }
+ skconn->st = st;
+ skconn->type = SOCK_DGRAM;
+
+ if (rt < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "bind message socket error !!");
+ close(st);
+ return -1;
+ }
+
+ return 1;
+}
+
+int zyUtilUdpConnInit(const int domain, const char *addr, const int port, skconn_t *skconn)
+{
+ int st;
+ int len, rt = 0;
+
+ printf("%s\n", __FUNCTION__);
+
+ if(!addr || !skconn) {
+ return -1;
+ }
+
+ if ((st = socket(domain, SOCK_DGRAM, 0)) < 0) {
+ zcfgLog(ZCFG_LOG_INFO, "%s: create message socket error \n", __FUNCTION__);
+ return 0;
+ }
+
+ memset(skconn, 0, sizeof(skconn_t));
+ skconn->domain = domain;
+ if(domain == AF_UNIX) {
+ struct sockaddr_un svrAddr;
+
+ memset(&svrAddr, 0, sizeof(struct sockaddr_un));
+ svrAddr.sun_family = AF_UNIX;
+ if(strlen(addr) > sizeof(svrAddr.sun_path)) {
+ close(st);
+ return -1;
+ }
+ strcpy(svrAddr.sun_path, addr);
+ len = sizeof(svrAddr.sun_family) + strlen(svrAddr.sun_path);
+
+ rt = connect(st, (struct sockaddr*)&svrAddr, len);
+ }else if(domain == AF_INET) {
+ struct sockaddr_in svrSkAddr;
+ struct in_addr addrn;
+
+ memset(&svrSkAddr, 0, sizeof(struct sockaddr_in));
+ svrSkAddr.sin_family = AF_INET;
+ inet_aton(addr, &addrn);
+ svrSkAddr.sin_addr.s_addr = skconn->ip = addrn.s_addr;
+ skconn->port = port;
+ svrSkAddr.sin_port = htons(port);
+ len = sizeof(struct sockaddr);
+
+ rt = connect(st, (struct sockaddr*)&svrSkAddr, len);
+ }else {
+ close(st);
+ return -1;
+ }
+ skconn->st = st;
+ skconn->type = SOCK_DGRAM;
+
+ if(rt < 0)
+ {
+ zcfgLog(ZCFG_LOG_INFO, "connect failed!!");
+ close(st);
+ return -1;
+ }
+
+ return 1;
+}
Index: libzyutil-1.0/zyutil.h
===================================================================
--- libzyutil-1.0.orig/zyutil.h 2015-02-26 21:59:52.275409509 +0800
+++ libzyutil-1.0/zyutil.h 2015-02-26 21:59:52.343409511 +0800
@@ -41,4 +41,29 @@
zcfgRet_t zyUtilIGetNumberOfMAC(int *num);
zcfgRet_t zyUtilMailSend(const char *msg);
+/* skconn */
+#include <sys/un.h>
+#include <arpa/inet.h>
+#include <sys/time.h>
+
+#define TCP_BACKLOG 5
+
+typedef struct skconn_s
+{
+ int domain;
+ int type;
+ int st;
+ int fcntl;
+ in_addr_t ip; //uint32_t
+ unsigned short port;
+ char pad[2];
+}skconn_t;
+
+unsigned int zyUtilComputeMicroInterval(struct timeval *, struct timeval *);
+void zyUtilMakeTimeStamp(struct timeval *tv, char *timeStamp, unsigned int timeStampSz);
+int zyUtilTcpConnInit(const int domain, const char *addr, const int port, skconn_t *skconn);
+int zyUtilTcpSvrInit(const int domain, const char *addr, const int port, skconn_t *skconn);
+int zyUtilUdpConnInit(const int domain, const char *addr, const int port, skconn_t *skconn);
+int zyUtilUdpSvrInit(const int domain, const char *addr, const int port, skconn_t *skconn);
+
#endif