mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2025-12-10 07:44:41 +01:00
make diagnostics independent of libbbf
This commit is contained in:
parent
5c92271ba5
commit
43e73fb4ee
14 changed files with 107 additions and 54 deletions
|
|
@ -10,6 +10,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include "backupSession.h"
|
||||
#include "xml.h"
|
||||
#include "log.h"
|
||||
|
|
|
|||
|
|
@ -55,8 +55,7 @@ icwmpd_LDADD = \
|
|||
$(LIBJSON_LIBS) \
|
||||
$(LBLOBMSG_LIBS) \
|
||||
$(LIBZ_LIBS) \
|
||||
$(LIBM_LIBS) \
|
||||
-lbbfdm
|
||||
$(LIBM_LIBS)
|
||||
|
||||
icwmpd_CFLAGS+=-DCWMP_VERSION=\"$(CWMP_VERSION)\"
|
||||
icwmpd_LDFLAGS+=-DCWMP_VERSION=\"$(CWMP_VERSION)\"
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
* Copyright (C) 2013-2020 iopsys Software Solutions AB
|
||||
* Author Omar Kallel <omar.kallel@pivasoftware.com>
|
||||
*/
|
||||
#include <ctype.h>
|
||||
#include "common.h"
|
||||
#include "log.h"
|
||||
#include "cwmp_uci.h"
|
||||
|
|
|
|||
51
diagnostic.c
51
diagnostic.c
|
|
@ -9,7 +9,8 @@
|
|||
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include "common.h"
|
||||
#include "diagnostic.h"
|
||||
#include "config.h"
|
||||
|
|
@ -21,13 +22,9 @@
|
|||
struct diagnostic_input
|
||||
{
|
||||
char *input_name;
|
||||
char *package;
|
||||
char *section;
|
||||
char *option;
|
||||
int (*get_input_value)(char *package, char* section, char* option, char **value);
|
||||
char *parameter_name;
|
||||
};
|
||||
|
||||
|
||||
int get_diagnostic_value_by_uci(char *package, char* section, char* option, char **value);
|
||||
int get_dm_ip_iface_object_by_uci_iface(char *package, char* section, char* option, char **dmiface);
|
||||
|
||||
|
|
@ -38,24 +35,24 @@ int get_dm_ip_iface_object_by_uci_iface(char *package, char* section, char* opti
|
|||
#define UPLOAD_DIAG_OP_NAME "UploadDiagnostics"
|
||||
|
||||
struct diagnostic_input download_diagnostics_array[DOWNLOAD_NUMBER_INPUTS]={
|
||||
{"Interface","dmmap_diagnostics","download","interface",get_dm_ip_iface_object_by_uci_iface},
|
||||
{"DownloadURL","dmmap_diagnostics","download","url",get_diagnostic_value_by_uci},
|
||||
{"DSCP","dmmap_diagnostics","download","DSCP",get_diagnostic_value_by_uci},
|
||||
{"EthernetPriority","dmmap_diagnostics","download","ethernetpriority",get_diagnostic_value_by_uci},
|
||||
{"ProtocolVersion","dmmap_diagnostics","download","ProtocolVersion",get_diagnostic_value_by_uci},
|
||||
{"NumberOfConnections","dmmap_diagnostics","download","NumberOfConnections",get_diagnostic_value_by_uci},
|
||||
{"EnablePerConnectionResults","dmmap_diagnostics","download","EnablePerConnection",get_diagnostic_value_by_uci}
|
||||
{"Interface","Device.IP.Diagnostics.DownloadDiagnostics.Interface"},
|
||||
{"DownloadURL","Device.IP.Diagnostics.DownloadDiagnostics.DownloadURL"},
|
||||
{"DSCP","Device.IP.Diagnostics.DownloadDiagnostics.DSCP"},
|
||||
{"EthernetPriority","Device.IP.Diagnostics.DownloadDiagnostics.EthernetPriority"},
|
||||
{"ProtocolVersion","Device.IP.Diagnostics.DownloadDiagnostics.ProtocolVersion"},
|
||||
{"NumberOfConnections","Device.IP.Diagnostics.DownloadDiagnostics.NumberOfConnections"},
|
||||
{"EnablePerConnectionResults","Device.IP.Diagnostics.DownloadDiagnostics.EnablePerConnection"}
|
||||
};
|
||||
|
||||
struct diagnostic_input upload_diagnostics_array[UPLOAD_NUMBER_INPUTS]={
|
||||
{"Interface","dmmap_diagnostics","upload","interface",get_dm_ip_iface_object_by_uci_iface},
|
||||
{"UploadURL","dmmap_diagnostics","upload","url",get_diagnostic_value_by_uci},
|
||||
{"TestFileLength","dmmap_diagnostics","upload","TestFileLength",get_diagnostic_value_by_uci},
|
||||
{"DSCP","dmmap_diagnostics","upload","DSCP",get_diagnostic_value_by_uci},
|
||||
{"EthernetPriority","dmmap_diagnostics","upload","ethernetpriority",get_diagnostic_value_by_uci},
|
||||
{"ProtocolVersion","dmmap_diagnostics","upload","ProtocolVersion",get_diagnostic_value_by_uci},
|
||||
{"NumberOfConnections","dmmap_diagnostics","upload","NumberOfConnections",get_diagnostic_value_by_uci},
|
||||
{"EnablePerConnectionResults","dmmap_diagnostics","upload","EnablePerConnection",get_diagnostic_value_by_uci}
|
||||
{"Interface","Device.IP.Diagnostics.UploadDiagnostics.Interface"},
|
||||
{"UploadURL","Device.IP.Diagnostics.UploadDiagnostics.UploadURL"},
|
||||
{"TestFileLength","Device.IP.Diagnostics.UploadDiagnostics.TestFileLength"},
|
||||
{"DSCP","Device.IP.Diagnostics.UploadDiagnostics.DSCP"},
|
||||
{"EthernetPriority","Device.IP.Diagnostics.UploadDiagnostics.EthernetPriority"},
|
||||
{"ProtocolVersion","Device.IP.Diagnostics.UploadDiagnostics.ProtocolVersion"},
|
||||
{"NumberOfConnections","Device.IP.Diagnostics.UploadDiagnostics.NumberOfConnections"},
|
||||
{"EnablePerConnectionResults","Device.IP.Diagnostics.UploadDiagnostics.EnablePerConnection"}
|
||||
};
|
||||
|
||||
static int icwmpd_cmd_no_wait(char *cmd, int n, ...)
|
||||
|
|
@ -116,7 +113,8 @@ int get_dm_ip_iface_object_by_uci_iface(char *package, char* section, char* opti
|
|||
int cwmp_start_diagnostic(int diagnostic_type)
|
||||
{
|
||||
int e, i, number_inputs;
|
||||
char *value = NULL, *operate_name = NULL;
|
||||
char *operate_name = NULL;
|
||||
json_object *parameters = NULL, *param_obj = NULL, *value_obj = NULL;
|
||||
|
||||
struct diagnostic_input *diagnostics_array;
|
||||
if (diagnostic_type == DOWNLOAD_DIAGNOSTIC) {
|
||||
|
|
@ -130,10 +128,13 @@ int cwmp_start_diagnostic(int diagnostic_type)
|
|||
}
|
||||
LIST_HEAD(diagnostics_param_value_list);
|
||||
for (i=0; i<number_inputs; i++) {
|
||||
if (diagnostics_array[i].get_input_value(diagnostics_array[i].package, diagnostics_array[i].section, diagnostics_array[i].option, &value) != 0)
|
||||
if (cwmp_get_parameter_values(diagnostics_array[i].parameter_name, ¶meters) != NULL)
|
||||
continue;
|
||||
cwmp_add_list_param_value(diagnostics_array[i].input_name, value, &diagnostics_param_value_list);
|
||||
FREE(value);
|
||||
param_obj = json_object_array_get_idx(parameters, 0);
|
||||
json_object_object_get_ex(param_obj, "value", &value_obj);
|
||||
cwmp_add_list_param_value(diagnostics_array[i].input_name, (char*)json_object_get_string(value_obj), &diagnostics_param_value_list);
|
||||
FREE_JSON(value_obj);
|
||||
FREE_JSON(param_obj);
|
||||
}
|
||||
|
||||
e = cwmp_ubus_call("usp.raw", "operate", CWMP_UBUS_ARGS{{"path", {.str_val="Device.IP.Diagnostics."}, UBUS_String},{"action", {.str_val=operate_name}, UBUS_String},{"input", {.param_value_list=&diagnostics_param_value_list}, UBUS_Obj_Obj}}, 3, &old_global_json_obj);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@
|
|||
|
||||
#include <poll.h>
|
||||
#include <json-c/json.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "external.h"
|
||||
#include "xml.h"
|
||||
|
|
|
|||
27
http.c
27
http.c
|
|
@ -13,9 +13,13 @@
|
|||
|
||||
#include <curl/curl.h>
|
||||
#include <pthread.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "external.h"
|
||||
#include "log.h"
|
||||
/*#include "xml.h"*/
|
||||
#include "config.h"
|
||||
#include "event.h"
|
||||
#include "http.h"
|
||||
|
|
@ -125,8 +129,8 @@ http_get_response(void *buffer, size_t size, size_t rxed, char **msg_in)
|
|||
int
|
||||
http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len,char **msg_in)
|
||||
{
|
||||
unsigned char buf[sizeof(struct in6_addr)];
|
||||
int tmp = 0;
|
||||
unsigned char buf[sizeof(struct in6_addr)];
|
||||
int tmp = 0;
|
||||
CURLcode res;
|
||||
long http_code = 0;
|
||||
static char ip_acs[128] = {0};
|
||||
|
|
@ -172,22 +176,7 @@ http_send_message(struct cwmp *cwmp, char *msg_out, int msg_out_len,char **msg_i
|
|||
}
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_c.header_list);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out);
|
||||
if (msg_out)/*#include <stdint.h>
|
||||
|
||||
#include <libubox/uloop.h>
|
||||
*/
|
||||
/*#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <fcntl.h>
|
||||
#include <uci.h>
|
||||
#include <libubox/uloop.h>
|
||||
#include <libubox/usock.h>*/
|
||||
if (msg_out)
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) msg_out_len);
|
||||
else
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);
|
||||
|
|
|
|||
|
|
@ -10,13 +10,14 @@
|
|||
*/
|
||||
#ifndef __CCOMMON_H
|
||||
#define __CCOMMON_H
|
||||
#include <libbbfdm/dmdiagnostics.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <libubox/list.h>
|
||||
#include <sys/time.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#ifndef CWMP_VERSION
|
||||
#define CWMP_VERSION "3.0.0"
|
||||
|
|
@ -189,7 +190,7 @@ struct cwmp_dm_parameter {
|
|||
char *type;
|
||||
};
|
||||
|
||||
/*enum amd_version_enum {
|
||||
enum amd_version_enum {
|
||||
AMD_1 = 1,
|
||||
AMD_2,
|
||||
AMD_3,
|
||||
|
|
@ -200,7 +201,7 @@ struct cwmp_dm_parameter {
|
|||
enum instance_mode {
|
||||
INSTANCE_MODE_NUMBER,
|
||||
INSTANCE_MODE_ALIAS
|
||||
};*/
|
||||
};
|
||||
|
||||
struct cwmp_namespaces
|
||||
{
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@
|
|||
#include <pthread.h>
|
||||
#include <libubox/uloop.h>
|
||||
#include <sys/file.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include "common.h"
|
||||
#include "session.h"
|
||||
#include "xml.h"
|
||||
|
|
|
|||
|
|
@ -12,6 +12,17 @@
|
|||
#ifndef __DIAGNOSTIC__H
|
||||
#define __DIAGNOSTIC__H
|
||||
|
||||
#define IPPING_PATH "/usr/share/bbfdm/functions/ipping_launch"
|
||||
#define NSLOOKUP_PATH "/usr/share/bbfdm/functions/nslookup_launch"
|
||||
#define TRACEROUTE_PATH "/usr/share/bbfdm/functions/traceroute_launch"
|
||||
#define UDPECHO_PATH "/usr/share/bbfdm/functions/udpecho_launch"
|
||||
#define SERVERSELECTION_PATH "/usr/share/bbfdm/functions/serverselection_launch"
|
||||
|
||||
enum diagnostic_type {
|
||||
DOWNLOAD_DIAGNOSTIC = 1,
|
||||
UPLOAD_DIAGNOSTIC
|
||||
};
|
||||
|
||||
int cwmp_ip_ping_diagnostic();
|
||||
int cwmp_start_diagnostic(int diagnostic_type);
|
||||
int cwmp_nslookup_diagnostic();
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
*/
|
||||
#ifndef _FREECWMP_UBUS_H__
|
||||
#define _FREECWMP_UBUS_H__
|
||||
#include <json-c/json.h>
|
||||
#include "common.h"
|
||||
#define ARRAY_MAX 8
|
||||
|
||||
|
|
|
|||
37
inc/xml.h
37
inc/xml.h
|
|
@ -37,6 +37,43 @@ extern int count_download_queue;
|
|||
extern const struct rpc_cpe_method rpc_cpe_methods[__RPC_CPE_MAX];
|
||||
extern const struct rpc_acs_method rpc_acs_methods[__RPC_ACS_MAX];
|
||||
|
||||
enum fault_code_enum {
|
||||
FAULT_9000 = 9000,// Method not supported
|
||||
FAULT_9001,// Request denied
|
||||
FAULT_9002,// Internal error
|
||||
FAULT_9003,// Invalid arguments
|
||||
FAULT_9004,// Resources exceeded
|
||||
FAULT_9005,// Invalid parameter name
|
||||
FAULT_9006,// Invalid parameter type
|
||||
FAULT_9007,// Invalid parameter value
|
||||
FAULT_9008,// Attempt to set a non-writable parameter
|
||||
FAULT_9009,// Notification request rejected
|
||||
FAULT_9010,// Download failure
|
||||
FAULT_9011,// Upload failure
|
||||
FAULT_9012,// File transfer server authentication failure
|
||||
FAULT_9013,// Unsupported protocol for file transfer
|
||||
FAULT_9014,// Download failure: unable to join multicast group
|
||||
FAULT_9015,// Download failure: unable to contact file server
|
||||
FAULT_9016,// Download failure: unable to access file
|
||||
FAULT_9017,// Download failure: unable to complete download
|
||||
FAULT_9018,// Download failure: file corrupted
|
||||
FAULT_9019,// Download failure: file authentication failure
|
||||
FAULT_9020,// Download failure: unable to complete download
|
||||
FAULT_9021,// Cancelation of file transfer not permitted
|
||||
FAULT_9022,// Invalid UUID format
|
||||
FAULT_9023,// Unknown Execution Environment
|
||||
FAULT_9024,// Disabled Execution Environment
|
||||
FAULT_9025,// Diployment Unit to Execution environment mismatch
|
||||
FAULT_9026,// Duplicate Deployment Unit
|
||||
FAULT_9027,// System Ressources Exceeded
|
||||
FAULT_9028,// Unknown Deployment Unit
|
||||
FAULT_9029,// Invalid Deployment Unit State
|
||||
FAULT_9030,// Invalid Deployment Unit Update: Downgrade not permitted
|
||||
FAULT_9031,// Invalid Deployment Unit Update: Version not specified
|
||||
FAULT_9032,// Invalid Deployment Unit Update: Version already exist
|
||||
__FAULT_MAX
|
||||
};
|
||||
|
||||
void xml_exit(void);
|
||||
|
||||
int cwmp_handle_rpc_cpe_get_rpc_methods(struct session *session, struct rpc *rpc);
|
||||
|
|
|
|||
3
log.c
3
log.c
|
|
@ -10,7 +10,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdarg.h>
|
||||
#include "common.h"
|
||||
#include "log.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,11 @@
|
|||
* Author Omar Kallel <omar.kallel@pivasoftware.com>
|
||||
*
|
||||
*/
|
||||
#include <unistd.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <netdb.h>
|
||||
#include <libubox/list.h>
|
||||
#include "notifications.h"
|
||||
|
||||
LIST_HEAD(list_value_change);
|
||||
|
|
@ -278,7 +281,7 @@ static void send_udp_message(struct addrinfo *servaddr, char *msg)
|
|||
}
|
||||
}
|
||||
|
||||
void del_list_lw_notify(struct dm_parameter *dm_parameter)
|
||||
void del_list_lw_notify(struct cwmp_dm_parameter *dm_parameter)
|
||||
{
|
||||
|
||||
list_del(&dm_parameter->list);
|
||||
|
|
@ -288,9 +291,9 @@ void del_list_lw_notify(struct dm_parameter *dm_parameter)
|
|||
|
||||
static void free_all_list_lw_notify()
|
||||
{
|
||||
struct dm_parameter *dm_parameter;
|
||||
struct cwmp_dm_parameter *dm_parameter;
|
||||
while (list_lw_value_change.next != &list_lw_value_change) {
|
||||
dm_parameter = list_entry(list_lw_value_change.next, struct dm_parameter, list);
|
||||
dm_parameter = list_entry(list_lw_value_change.next, struct cwmp_dm_parameter, list);
|
||||
del_list_lw_notify(dm_parameter);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
3
ubus.c
3
ubus.c
|
|
@ -16,7 +16,8 @@
|
|||
#include <sys/file.h>
|
||||
#include <pthread.h>
|
||||
#include <libubus.h>
|
||||
#include <json-c/json.h>
|
||||
#include <libubox/blobmsg_json.h>
|
||||
|
||||
#include "ubus.h"
|
||||
#include "session.h"
|
||||
#include "xml.h"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue