Ticket refs#1598: libbbfdm: plug-in based with support for dynamic loading of libraries + separate libbbfdm into two libraries: libbbf_api (API) and libbbfdm (data model)

This commit is contained in:
Amin Ben Ramdhane 2020-01-21 22:43:37 +01:00
parent bb70a0129c
commit 4ab526b9f2
80 changed files with 1959 additions and 525 deletions

View file

@ -9,12 +9,12 @@ The root directory of bbfdm library is **“src”** which is structred as follo
The bbfdm library offers a tool to generate templates of the source code from json files.
```plain
$ ./convertor_json_to_c.py
Usage: ./convertor_json_to_c.py <json data model>
$ python convertor_json_to_c.py
Usage: convertor_json_to_c.py <json data model>
Examples:
- ./convertor_json_to_c.py tr181.json
- convertor_json_to_c.py tr181.json
==> Generate the C code of all data model in tr181/ folder
- ./convertor_json_to_c.py tr104.json
- convertor_json_to_c.py tr104.json
==> Generate the C code of all data model in tr104/ folder
```
**Note:** Any developer can full the json file (**tr181.json** or **tr104.json**) with mapping field according to UCI, UBUS or CLI commands before generating the source code in C.
@ -95,7 +95,7 @@ Each object in the **DMOBJ** table contains the following arguments:
| `browseinstobj` | This function allow to browse all instances under this object |
| `forced_inform` | If it's set to `&DMFINFRM` that mean the object contains a force inform parameter in its subtree. The forced inform parameters are the parameter included in the inform message |
| `notification` | The notification of the object. Could be **&DMACTIVE**, **&DMACTIVE** or **&DMNONE** |
| `nextjsonobj` | Pointer to a **DMOBJ** array which contains a list of the child objects using json file |
| `nextdynamicobj` | Pointer to the next of **DMOBJ** which contains a list of the child objects using json files and plugins(libraries) |
| `nextobj` | Pointer to a **DMOBJ** array which contains a list of the child objects |
| `leaf` | Pointer to a **DMLEAF** array which contains a list of the child objects |
| `linker` | This argument is used for LowerLayer parameters or to make reference to other instance object in the tree |
@ -116,7 +116,10 @@ Each parameter in the **DMLEAF** table contains the following arguments:
| `notification` | The notification of the parameter. Could be **&DMACTIVE**, **&DMACTIVE** or **&DMNONE** |
| `bbfdm_type` | The bbfdm type of the parameter. Could be **BBFDM_CWMP**, **BBFDM_USP** or **BBFDM_NONE**.If it's `BBFDM_NONE` then we can see this parameter in all protocols (CWMP, USP,...) |
## BBFDM API used for GET/SET/ADD/Delete calls ##
## BBFDM API ##
The bbfdm API is used for GET/SET/ADD/Delete/Operate calls.
It includes list of `UCI` functions. The most used one are as follow:
**1. dmuci_get_option_value_string:** execute the uci get value
@ -202,21 +205,25 @@ End of BBF Data Models Generation
#### JSON generator: ####
It is a generator of json file from C source code.
```plain
$ ./generator_json_with_backend.py
Usage: ./generator_json_with_backend.py <tr-181 cwmp xml data model> <tr-181 usp xml data model> [Object path]
$ python generator_json_with_backend.py
Usage: generator_json_with_backend.py <tr-181 cwmp xml data model> <tr-181 usp xml data model> [Object path]
Examples:
- ./generator_json_with_backend.py tr-181-2-12-0-cwmp-full.xml tr-181-2-12-0-usp-full.xml Device.
- generator_json_with_backend.py tr-181-2-12-0-cwmp-full.xml tr-181-2-12-0-usp-full.xml Device.
==> Generate the json file of the sub tree Device. in tr181.json
- ./generator_json_with_backend.py tr-104-1-1-0-full.xml VoiceService.
- generator_json_with_backend.py tr-104-1-1-0-full.xml VoiceService.
==> Generate the json file of the sub tree VoiceService. in tr104.json
- ./generator_json_with_backend.py tr-106-1-2-0-full.xml Device.
- generator_json_with_backend.py tr-106-1-2-0-full.xml Device.
==> Generate the json file of the sub tree Device. in tr106.json
Example of xml data model file: https://www.broadband-forum.org/cwmp/tr-181-2-12-0-cwmp-full.xml
```
#### Additional dynamic parameters at run time ####
The bbfdm library allows all applications installed on the box to import its own tr-181 data model parameters at run time.<br/>
#### Load additional parameters at run time ####
The bbfdm library allows all applications installed on the box to import its own tr-181 data model parameters at run time in two formats: **JSON files** and **Plugin(library) files**.
#### `JSON Files:` ####
The application should bring its JSON file under **'/etc/bbfdm/json/'** path with **UCI** and **UBUS** mappings. The new added parameters will be automatically shown by icwmp and uspd/obuspa.
**1. Object without instance:**
@ -394,4 +401,56 @@ The application should bring its JSON file under **'/etc/bbfdm/json/'** path wit
}
}
```
####
#### `Plugin(library) Files:` ####
The application should bring its plugin(library) file under **'/usr/lib/bbfdm/'** path that contains the sub tree of **Objects/Parameters** and the related functions **Get/Set/Add/Delete/Operate**. The new added objects, parameters and operates will be automatically shown by icwmp and uspd/obuspa.
To build a new library, you can use **example source code** under **library** folder to help you build it.
Each library should contains two Root table named **“tRootDynamicObj”** and **“tRootDynamicOperate”** to define the parant path for each new object and operate.
#### RootDynamicObject definition ####
![object](/pictures/rootdynamicobj.png)
Each object in the **LIB_MAP_OBJ** table contains two arguments:
| Argument | Description |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `parentobj` | A string of the parent object name. Example “Device.IP.Diagnostics.”, “Device.DeviceInfo”, “Device.WiFi.Radio.” |
| `nextobject` | Pointer to a **DMOBJ** array which contains a list of the child objects. |
#### RootDynamicOperate definition ####
![object](/pictures/rootdynamincoperate.png)
Each operate in the **LIB_MAP_OPERATE** table contains two arguments:
| Argument | Description |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `pathname` | A string of the path name operate. Example “Device.BBKSpeedTest”, “Device.WiFi.AccessPoint.*.X_IOPSYS_EU_Reset” |
| `operation` | The function which return the status of this operate. |
For the other tables, they are defined in the same way as the [Object and Parameter](#object-definition) definition described above.
**Below are the steps for building of a new library using JSON file**
**1. Create the json file:**
Any developer should create a json file containing object requested as defined in the above section of **JSON Files**. You can find an example of json file **example.json** under **library** folder.
**2. Generate the source code:**
The bbfdm library offers a tool to generate templates of the library source code from json file. You can find the tool **generate_library.py** under **library** folder.
```plain
$ python generate_library.py
Usage: generate_library.py <json file>
Examples:
- generate_library.py example.json
==> Generate the C code in example/ folder
```
**3. Fill the functions of object/parameter:**
After building the templates of source code, a **test.c, test.h and Makefile** files will be generated under **test** folder that contains the functions related to each object, parameter and operate. Then, you have to fill each function with the necessary [bbfdm API](#bbfdm-api) defined above. You can find an example of source code **(example folder)** under **library** folder.

View file

@ -1,20 +1,47 @@
LIB_BBFDM_VERSION = 3:0:0
lib_LTLIBRARIES = libbbfdm.la
lib_LTLIBRARIES = libbbf_api.la
libbbf_api_la_SOURCES = \
../libbbf_api/dmbbf.c \
../libbbf_api/dmubus.c \
../libbbf_api/dmjson.c \
../libbbf_api/dmuci.c \
../libbbf_api/dmcommon.c \
../libbbf_api/dmmem.c
libbbf_api_la_CFLAGS = \
$(AM_CFLAGS) \
$(LIBUCI_CFLAGS) \
$(LIBUBOX_CFLAGS) \
$(LIBUBUS_CFLAGS)
libbbf_api_la_LDFLAGS = \
$(AM_LDFLAGS) \
$(LIBUCI_LDFLAGS) \
$(LIBUBOX_LDFLAGS) \
$(LIBUBUS_LDFLAGS)
libbbf_api_la_LIBADD = \
$(AM_LIBS) \
$(LIBUCI_LIBS) \
$(LIBUBOX_LIBS) \
$(LIBUBUS_LIBS) \
$(LIBJSON_LIBS) \
$(LBLOBMSG_LIBS)
lib_LTLIBRARIES += libbbfdm.la
libbbfdm_la_SOURCES = \
../md5.c \
../dmbbf.c \
../dmentry.c \
../dmmem.c \
../dmubus.c \
../dmjson.c \
../dmuci.c \
../dmcommon.c \
../dmoperate.c \
../dmdiagnostics.c \
../dmentry.c \
../dmentrylibrary.c \
../dmentryjson.c \
../dmmemjson.c \
../dmoperate.c \
../dmdiagnostics.c \
../dmbbfcommon.c \
../md5.c \
../wepkey.c
if BBF_TR181
@ -106,10 +133,10 @@ libbbfdm_la_LIBADD = \
$(LIBUBUS_LIBS) \
$(LIBJSON_LIBS) \
$(LIBTRACE_LIBS) \
$(LBLOBMSG_LIBS)
$(LBLOBMSG_LIBS) \
-lbbf_api
libbbfdm_la_CFLAGS+=-I../
libbbfdm_la_CFLAGS+=-I../dmtree/
libbbfdm_la_CFLAGS+=-I../dmtree/tr181
libbbfdm_la_CFLAGS+=-I../dmtree/tr104
libbbfdm_la_CFLAGS+=-I../dmtree/tr143

106
dmbbfcommon.c Normal file
View file

@ -0,0 +1,106 @@
/*
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
#include "dmbbfcommon.h"
int bbfdmuci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value)
{
return dmuci_lookup_ptr(ctx, ptr, package, section, option, value);
}
void bbf_apply_end_session(void)
{
apply_end_session();
}
int set_bbfdatamodel_type(int bbf_type)
{
bbfdatamodel_type = bbf_type;
return 0;
}
int set_upnp_in_user_mask(unsigned int upnp_user_mask)
{
upnp_in_user_mask = upnp_user_mask;
return 0;
}
int bbf_set_ip_version(int ipversion)
{
ip_version = ipversion;
return 0;
}
int set_bbf_end_session_flag(int flag)
{
return (end_session_flag &= flag);
}
int reset_bbf_end_session_flag(void)
{
end_session_flag = 0;
return 0;
}
void bbf_del_list_parameter(struct dm_parameter *dm_parameter)
{
del_list_parameter(dm_parameter);
}
void bbf_cwmp_set_end_session (unsigned int flag)
{
cwmp_set_end_session (flag);
}
int bbfdm_update_file_enabled_notify(char *param, char *new_value)
{
return dm_update_file_enabled_notify(param, new_value);
}
void bbfdmjson_parse_init(char *msg)
{
dmjson_parse_init(msg);
}
void bbfdmjson_parse_fini(void)
{
dmjson_parse_fini();
}
json_object *bbfdmjson_select_obj(json_object * jobj, char *argv[])
{
return (dmjson_select_obj(jobj, argv));
}
void bbf_del_list_fault_param(struct param_fault *param_fault)
{
del_list_fault_param(param_fault);
}
int dm_copy_temporary_file_to_original_file(char *f1, char *f2)
{
return copy_temporary_file_to_original_file(f1, f2);
}
void bbfdmjson_get_var(char *jkey, char **jval)
{
dmjson_get_var(jkey, jval);
}
void bbfdm_update_enabled_notify(struct dm_enabled_notify *p, char *new_value)
{
dm_update_enabled_notify(p, new_value);
}
struct list_head get_bbf_list_enabled_lw_notify(void)
{
return list_enabled_lw_notify;
}

36
dmbbfcommon.h Normal file
View file

@ -0,0 +1,36 @@
/*
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include <libbbf_api/dmcommon.h>
int bbfdmuci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value);
void bbf_apply_end_session(void);
int set_bbfdatamodel_type(int bbf_type);
int set_upnp_in_user_mask(unsigned int upnp_user_mask);
int bbf_set_ip_version(int ipversion);
int set_bbf_end_session_flag(int flag);
int reset_bbf_end_session_flag(void);
void bbf_del_list_parameter(struct dm_parameter *dm_parameter);
void bbf_cwmp_set_end_session (unsigned int flag);
int bbfdm_update_file_enabled_notify(char *param, char *new_value);
void bbfdmjson_parse_init(char *msg);
void bbfdmjson_parse_fini(void);
json_object *bbfdmjson_select_obj(json_object * jobj, char *argv[]);
void bbf_del_list_fault_param(struct param_fault *param_fault);
int dm_copy_temporary_file_to_original_file(char *f1, char *f2);
void bbfdmjson_get_var(char *jkey, char **jval);
void bbfdm_update_enabled_notify(struct dm_enabled_notify *p, char *new_value);
struct list_head get_bbf_list_enabled_lw_notify(void);

View file

@ -23,8 +23,7 @@
#include <inttypes.h>
#include <assert.h>
#include <getopt.h>
#include "dmentry.h"
#include "dmcommon.h"
#include <libbbf_api/dmcommon.h>
#include "dmdiagnostics.h"
int read_next;

View file

@ -8,21 +8,23 @@
* Author MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
* Author Imen Bhiri <imen.bhiri@pivasoftware.com>
* Author Feten Besbes <feten.besbes@pivasoftware.com>
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
#include <unistd.h>
#include <ctype.h>
#include <sys/wait.h>
#include "dmbbf.h"
#include "dmubus.h"
#include "dmuci.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "dmentryjson.h"
#include "dmentrylibrary.h"
#include "dmoperate.h"
#include "device.h"
#include "wepkey.h"
#include "dmcommon.h"
#include "dmoperate.h"
#include "dmentryjson.h"
LIST_HEAD(head_package_change);
unsigned char dmcli_timetrack = 0;
@ -155,33 +157,21 @@ int dm_ctx_clean_sub(struct dmctx *ctx)
return 0;
}
void dmentry_instance_lookup_inparam(struct dmctx *ctx)
{
char *pch, *spch, *in_param;
in_param = dmstrdup(ctx->in_param);
int i = 0;
char pat[2] = {0};
*pat = dm_delim;
for (pch = strtok_r(in_param, pat, &spch); pch != NULL; pch = strtok_r(NULL, pat, &spch)) {
if (pch[0]== '[') {
ctx->alias_register |= (1 << i);
i++;
} else if (isdigit(pch[0])) {
i++;
}
}
dmfree(in_param);
ctx->nbrof_instance = i;
}
int dm_entry_param_method(struct dmctx *ctx, int cmd, char *inparam, char *arg1, char *arg2)
{
int fault = 0;
bool setnotif = true, alarm = false, event = false;
int err, err2;
if (check_stats_folder(JSON_FOLDER_PATH))
if (check_stats_json_folder(JSON_FOLDER_PATH)) {
free_json_dynamic_arrays(tEntry181Obj);
load_json_dynamic_arrays(ctx);
}
if (check_stats_library_folder(LIBRARY_FOLDER_PATH)) {
free_library_dynamic_arrays(tEntry181Obj);
load_library_dynamic_arrays(ctx);
}
if (!inparam) inparam = "";
ctx->in_param = inparam;
@ -254,7 +244,7 @@ int dm_entry_param_method(struct dmctx *ctx, int cmd, char *inparam, char *arg1,
break;
case CMD_USP_OPERATE:
ctx->in_value = arg1 ? arg1 : "";
fault = dm_entry_operate(ctx);
fault = operate_on_node(ctx, ctx->in_param, ctx->in_value);
break;
#ifdef BBF_TR064
case CMD_UPNP_GET_SUPPORTED_PARAMETERS:
@ -1965,3 +1955,12 @@ invalid_arguments:
fprintf(stdout, "Invalid arguments!\n");;
}
int free_dynamic_arrays(void)
{
DMOBJ *root = tEntry181Obj;
DMNODE node = {.current_object = ""};
free_dm_browse_node_dynamic_object_tree(&node, root);
free_json_dynamic_arrays(tEntry181Obj);
free_library_dynamic_arrays(tEntry181Obj);
return 0;
}

View file

@ -8,13 +8,14 @@
* Author MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
* Author Imen Bhiri <imen.bhiri@pivasoftware.com>
* Author Feten Besbes <feten.besbes@pivasoftware.com>
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
#ifndef __DMENTRY_H__
#define __DMENTRY_H__
#include "dmbbf.h"
#include <libbbf_api/dmbbf.h>
extern struct list_head head_package_change;
extern unsigned char dmcli_timetrack;
extern unsigned char dmcli_evaluatetest;
@ -52,7 +53,7 @@ int dm_ctx_clean_sub(struct dmctx *ctx);
void dm_execute_cli_shell(int argc, char** argv, unsigned int dmtype, unsigned int amd_version, unsigned int instance_mode);
void dm_execute_cli_command(char *file, unsigned int dmtype, unsigned int amd_version, unsigned int instance_mode);
void wepkey_cli(int argc, char** argv);
void dmentry_instance_lookup_inparam(struct dmctx *ctx);
int free_dynamic_arrays(void);
#ifdef BBF_TR064
#define DM_ENTRY_UPNP_CHECK_CHANGES(ALARM, EVENT, VERSION) \

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 iopsys Software Solutions AB
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
@ -14,18 +14,17 @@
#include <ctype.h>
#include <sys/stat.h>
#include <dirent.h>
#include "dmcommon.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmjson.h"
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include "dmentryjson.h"
#include "dmmemjson.h"
#include "device.h"
LIST_HEAD(json_list);
static char json_hash[64] = "";
static int get_stats_folder(char *folder_path, int *file_count, unsigned long *size, unsigned long *date)
static int get_stats_json_folder(char *folder_path, int *file_count, unsigned long *size, unsigned long *date)
{
struct stat stats;
struct dirent *entry;
@ -56,7 +55,7 @@ static int get_stats_folder(char *folder_path, int *file_count, unsigned long *s
return 0;
}
void add_json_data_to_list(struct list_head *dup_list, char *name, char *arg1, const char *arg2, const char *arg3, const char *arg4, const char *arg5, const char *arg6)
static void add_json_data_to_list(struct list_head *dup_list, char *name, char *arg1, const char *arg2, const char *arg3, const char *arg4, const char *arg5, const char *arg6)
{
struct dm_json_parameter *dm_json_parameter;
dm_json_parameter = dmcallocjson(1, sizeof(struct dm_json_parameter));
@ -70,7 +69,7 @@ void add_json_data_to_list(struct list_head *dup_list, char *name, char *arg1, c
if (arg6) dm_json_parameter->arg6 = dmstrdupjson(arg6);
}
void delete_json_data_from_list(struct dm_json_parameter *dm_json_parameter)
static void delete_json_data_from_list(struct dm_json_parameter *dm_json_parameter)
{
list_del(&dm_json_parameter->list);
if (dm_json_parameter->name) dmfreejson(dm_json_parameter->name);
@ -83,7 +82,7 @@ void delete_json_data_from_list(struct dm_json_parameter *dm_json_parameter)
if (dm_json_parameter) dmfreejson(dm_json_parameter);
}
void free_json_data_from_list(struct list_head *dup_list)
static void free_json_data_from_list(struct list_head *dup_list)
{
struct dm_json_parameter *dm_json_parameter;
while (dup_list->next != dup_list) {
@ -92,13 +91,17 @@ void free_json_data_from_list(struct list_head *dup_list)
}
}
int dm_browse_node_object_tree(DMNODE *parent_node, DMOBJ *entryobj)
static int dm_browse_node_json_object_tree(DMNODE *parent_node, DMOBJ *entryobj)
{
if (!entryobj)
return 0;
for (; entryobj->obj; entryobj++) {
entryobj->nextjsonobj = NULL;
if (entryobj->nextdynamicobj) {
struct dm_dynamic_obj *next_dyn_array = entryobj->nextdynamicobj + INDX_JSON_OBJ_MOUNT;
if (next_dyn_array->nextobj) FREE(next_dyn_array->nextobj);
}
DMNODE node = {0};
node.obj = entryobj;
node.parent = parent_node;
@ -106,41 +109,38 @@ int dm_browse_node_object_tree(DMNODE *parent_node, DMOBJ *entryobj)
node.matched = parent_node->matched;
if (entryobj->nextobj)
dm_browse_node_object_tree(&node, entryobj->nextobj);
dm_browse_node_json_object_tree(&node, entryobj->nextobj);
}
return 0;
}
static int free_node_object_tree(void)
static int free_node_object_tree_dynamic_array(DMOBJ *dm_entryobj)
{
DMOBJ *root = tEntry181Obj;
DMOBJ *root = dm_entryobj;
DMNODE node = {.current_object = ""};
dm_browse_node_object_tree(&node, root);
dm_browse_node_json_object_tree(&node, root);
return 0;
}
int free_json_dynamic_arrays(void)
int free_json_dynamic_arrays(DMOBJ *dm_entryobj)
{
free_json_data_from_list(&json_list);
dmcleanmemjson();
free_node_object_tree();
free_node_object_tree_dynamic_array(dm_entryobj);
return 0;
}
int check_stats_folder(char *folder_path)
int check_stats_json_folder(char *json_folder_path)
{
int file_count = 0;
unsigned long size = 0, date = 0;
char str[64] = "";
if (!get_stats_folder(folder_path, &file_count, &size, &date))
if (!get_stats_json_folder(json_folder_path, &file_count, &size, &date))
return 0;
sprintf(str, "count:%d,sizes:%lu,date:%lu", file_count, size, date);
if (strcmp(str, json_hash)) {
free_json_dynamic_arrays();
strcpy(json_hash, str);
return 1;
}
@ -236,53 +236,7 @@ int get_index_of_available_entry(DMOBJ *jentryobj)
return idx;
}
int plugin_json_obj_match(struct dmctx *dmctx, struct dmnode *node, char *entry_obj, char *full_obj)
{
if (node->matched)
return 0;
if (!dmctx->inparam_isparam && strstr(node->current_object, full_obj) == node->current_object) {
node->matched++;
dmctx->findparam = 1;
return 0;
}
if (strstr(full_obj, node->current_object) == full_obj)
return 0;
return FAULT_9005;
}
void dm_check_obj(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, char *full_obj, char *obj, DMOBJ **root_entry, int *obj_found)
{
int err = 0;
if (!entryobj)
return;
char *parent_obj = parent_node->current_object;
for (; entryobj->obj; entryobj++) {
DMNODE node = {0};
node.obj = entryobj;
node.parent = parent_node;
node.instance_level = parent_node->instance_level;
node.matched = parent_node->matched;
dmasprintfjson(&(node.current_object), "%s%s%c", parent_obj, entryobj->obj, dm_delim);
if (strcmp(node.current_object, obj) == 0) {
*root_entry = entryobj;
*obj_found = 1;
return;
}
err = plugin_json_obj_match(dmctx, &node, entryobj->obj, full_obj);
if (err)
continue;
if (entryobj->nextobj)
dm_check_obj(dmctx, &node, entryobj->nextobj, full_obj, obj, root_entry, obj_found);
}
}
int check_root_obj(struct dmctx *ctx, char *in_param_json, DMOBJ **root_entry)
static int check_json_root_obj(struct dmctx *ctx, char *in_param_json, DMOBJ **root_entry)
{
char *prefix_obj = NULL, *obj = NULL, *full_obj;
int prefix_obj_found = 0, obj_found = 0;
@ -296,9 +250,9 @@ int check_root_obj(struct dmctx *ctx, char *in_param_json, DMOBJ **root_entry)
else
generate_prefixobj_and_obj_full_obj(full_obj, &prefix_obj, &obj);
dm_check_obj(ctx, &node, root, full_obj, prefix_obj, root_entry, &prefix_obj_found);
dm_check_dynamic_obj(ctx, &node, root, full_obj, prefix_obj, root_entry, &prefix_obj_found);
if(prefix_obj_found && *root_entry) {
dm_check_obj(ctx, &node, root, full_obj, full_obj, root_entry, &obj_found);
dm_check_dynamic_obj(ctx, &node, root, full_obj, full_obj, root_entry, &obj_found);
dmfreejson(full_obj);
if(obj_found)
return 1;
@ -718,7 +672,7 @@ static void count_obj_param_under_jsonobj(json_object *jsonobj, int *obj_number,
static void parse_obj(char *object, json_object *jobj, DMOBJ *pobj, int index, struct list_head *list)
{
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type(13)*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type(13)*/
char *full_obj = NULL, *prfix_obj = NULL, *obj_str = NULL;
int obj_number = 0, param_number = 0, i = 0, j = 0;
@ -788,8 +742,8 @@ static void parse_obj(char *object, json_object *jobj, DMOBJ *pobj, int index, s
//notification
pobj[index].notification = NULL;
//nextjsonobj
pobj[index].nextjsonobj = NULL;
//nextdynamicobj
pobj[index].nextdynamicobj = NULL;
//linker
pobj[index].get_linker = NULL;
@ -813,28 +767,39 @@ static void parse_obj(char *object, json_object *jobj, DMOBJ *pobj, int index, s
static void parse_next_obj(struct dmctx *ctx, json_object *jobj)
{
int instance = 0, indx = 0;
json_object_object_foreach(jobj, key, json_obj) {
DMOBJ *dm_entryobj = NULL;
if (json_object_get_type(json_obj) == json_type_object && is_obj(key, json_obj)) {
int check_obj = check_root_obj(ctx, key, &dm_entryobj);
int check_obj = check_json_root_obj(ctx, key, &dm_entryobj);
if (check_obj == 0) continue;
if (check_obj == 1) {
parse_next_obj(ctx, json_obj);
} else {
if (!dm_entryobj) continue;
if (dm_entryobj->nextjsonobj == NULL) {
dm_entryobj->nextjsonobj = dmcallocjson(2, sizeof(struct dm_obj_s));
parse_obj(key, json_obj, dm_entryobj->nextjsonobj, 0, &json_list);
if (dm_entryobj->nextdynamicobj == NULL) {
dm_entryobj->nextdynamicobj = calloc(__INDX_DYNAMIC_MAX, sizeof(struct dm_dynamic_obj));
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].isstatic = 0;
}
if (dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj == NULL) {
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj = calloc(2, sizeof(struct dm_obj_s *));
}
if (dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] == NULL) {
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] = dmcallocjson(2, sizeof(struct dm_obj_s));
parse_obj(key, jobj, dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0], 0, &json_list);
} else {
int idx = get_index_of_available_entry(dm_entryobj->nextjsonobj);
dm_entryobj->nextjsonobj = dmreallocjson(dm_entryobj->nextjsonobj, (idx + 2) * sizeof(struct dm_obj_s));
memset(dm_entryobj->nextjsonobj + (idx + 1), 0, sizeof(struct dm_obj_s));
parse_obj(key, json_obj, dm_entryobj->nextjsonobj, idx, &json_list);
int idx = get_index_of_available_entry(dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0]);
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] = dmreallocjson(dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0], (idx + 2) * sizeof(struct dm_obj_s));
memset(dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] + (idx + 1), 0, sizeof(struct dm_obj_s));
parse_obj(key, jobj, dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0], idx, &json_list);
}
}
}
}
}
int load_json_dynamic_arrays(struct dmctx *ctx)
@ -848,28 +813,39 @@ int load_json_dynamic_arrays(struct dmctx *ctx)
DMOBJ *dm_entryobj = NULL;
json_object *json;
char buf[32] = "";
int instance = 0, indx = 0;
sprintf(buf, "%s/%s", JSON_FOLDER_PATH, ent->d_name);
json = json_object_from_file(buf);
if (!json) continue;
json_object_object_foreach(json, key, jobj) {
if (!key) break;
int check_obj = check_root_obj(ctx, key, &dm_entryobj);
int check_obj = check_json_root_obj(ctx, key, &dm_entryobj);
if (check_obj == 0) continue;
if (check_obj == 1) {
parse_next_obj(ctx, jobj);
continue;
}
if (!dm_entryobj) continue;
if (dm_entryobj->nextjsonobj == NULL) {
dm_entryobj->nextjsonobj = dmcallocjson(2, sizeof(struct dm_obj_s));
parse_obj(key, jobj, dm_entryobj->nextjsonobj, 0, &json_list);
} else {
int idx = get_index_of_available_entry(dm_entryobj->nextjsonobj);
dm_entryobj->nextjsonobj = dmreallocjson(dm_entryobj->nextjsonobj, (idx + 2) * sizeof(struct dm_obj_s));
memset(dm_entryobj->nextjsonobj + (idx + 1), 0, sizeof(struct dm_obj_s));
parse_obj(key, jobj, dm_entryobj->nextjsonobj, idx, &json_list);
if (dm_entryobj->nextdynamicobj == NULL) {
dm_entryobj->nextdynamicobj = calloc(__INDX_DYNAMIC_MAX, sizeof(struct dm_dynamic_obj));
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].isstatic = 0;
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].isstatic = 1;
}
if (dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj == NULL) {
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj = calloc(2, sizeof(struct dm_obj_s *));
}
if (dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] == NULL) {
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] = dmcallocjson(2, sizeof(struct dm_obj_s));
parse_obj(key, jobj, dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0], 0, &json_list);
} else {
int idx = get_index_of_available_entry(dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0]);
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] = dmreallocjson(dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0], (idx + 2) * sizeof(struct dm_obj_s));
memset(dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0] + (idx + 1), 0, sizeof(struct dm_obj_s));
parse_obj(key, jobj, dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].nextobj[0], idx, &json_list);
}
}
if (json) json_object_put(json);

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 iopsys Software Solutions AB
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
@ -14,8 +14,8 @@
#define JSON_FOLDER_PATH "/etc/bbfdm/json"
int check_stats_folder(char *folder_path);
int check_stats_json_folder(char *json_folder_path);
int load_json_dynamic_arrays(struct dmctx *ctx);
int free_json_dynamic_arrays(void);
int free_json_dynamic_arrays(DMOBJ *dm_entryobj);
#endif //__DMENTRYJSON_H__

183
dmentrylibrary.c Normal file
View file

@ -0,0 +1,183 @@
/*
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#include <sys/stat.h>
#include <dirent.h>
#include <dlfcn.h>
#include <libbbf_api/dmcommon.h>
#include "dmentrylibrary.h"
#include "dmoperate.h"
static char library_hash[64] = "";
static int get_stats_library_folder(char *folder_path, int *file_count, unsigned long *size, unsigned long *date)
{
struct stat stats;
struct dirent *entry;
DIR *dirp = NULL;
char buf[256] = {0};
int filecount = 0;
unsigned long filesize = 0, filedate = 0;
if (isfolderexist(folder_path)) {
dirp = opendir(folder_path);
while ((entry = readdir(dirp)) != NULL) {
if ((entry->d_type == DT_REG) && (strstr(entry->d_name, ".so"))) {
filecount++;
sprintf(buf, "%s/%s", folder_path, entry->d_name);
if (!stat(buf, &stats)) {
filesize = (filesize + stats.st_size) / 2;
filedate = (filedate + stats.st_mtime) / 2;
}
}
}
if (dirp) closedir(dirp);
*file_count = filecount;
*size = filesize;
*date = filedate;
return 1;
}
return 0;
}
int check_stats_library_folder(char *library_folder_path)
{
int file_count = 0;
unsigned long size = 0, date = 0;
char str[64] = "";
if (!get_stats_library_folder(library_folder_path, &file_count, &size, &date))
return 0;
sprintf(str, "count:%d,sizes:%lu,date:%lu", file_count, size, date);
if (strcmp(str, library_hash)) {
strcpy(library_hash, str);
return 1;
}
return 0;
}
static int dm_browse_node_dynamic_object_tree(DMNODE *parent_node, DMOBJ *entryobj)
{
if (!entryobj)
return 0;
for (; entryobj->obj; entryobj++) {
if (entryobj->nextdynamicobj) {
struct dm_dynamic_obj *next_dyn_array = entryobj->nextdynamicobj + INDX_LIBRARY_OBJ_MOUNT;
if (next_dyn_array->nextobj) FREE(next_dyn_array->nextobj);
}
DMNODE node = {0};
node.obj = entryobj;
node.parent = parent_node;
node.instance_level = parent_node->instance_level;
node.matched = parent_node->matched;
if (entryobj->nextobj)
dm_browse_node_dynamic_object_tree(&node, entryobj->nextobj);
}
return 0;
}
int free_library_dynamic_arrays(DMOBJ *dm_entryobj)
{
DMOBJ *root = dm_entryobj;
DMNODE node = {.current_object = ""};
dm_browse_node_dynamic_object_tree(&node, root);
FREE(dynamic_operate);
return 0;
}
static int check_library_root_obj(struct dmctx *ctx, char *in_param, DMOBJ **root_entry)
{
int obj_found = 0;
DMOBJ *root = ctx->dm_entryobj;
DMNODE node = {.current_object = ""};
dm_check_dynamic_obj(ctx, &node, root, in_param, in_param, root_entry, &obj_found);
if(obj_found && *root_entry) return 1;
return 0;
}
static int get_index_of_available_dynamic_array(struct dm_obj_s **jentryobj)
{
int i, idx = 0;
for (i = 0; jentryobj[i]; i++) {
idx++;
}
return idx;
}
int load_library_dynamic_arrays(struct dmctx *ctx)
{
struct dirent *ent;
DIR *dir = NULL;
if (isfolderexist(LIBRARY_FOLDER_PATH)) {
sysfs_foreach_file(LIBRARY_FOLDER_PATH, dir, ent) {
if (strstr(ent->d_name, ".so")) {
void *handle;
LIB_MAP_OBJ *root_dynamic_obj = NULL;
LIB_MAP_OPERATE *root_dynamic_operate = NULL;
DMOBJ *dm_entryobj = NULL;
char buf[32] = "";
int i;
sprintf(buf, "%s/%s", LIBRARY_FOLDER_PATH, ent->d_name);
handle = dlopen(buf, RTLD_LAZY);
if (!handle) continue;
//Dynamic Object
*(void **) (&root_dynamic_obj) = dlsym(handle, "tRootDynamicObj");
if(root_dynamic_obj) {
for (i = 0; root_dynamic_obj[i].path; i++) {
if (!root_dynamic_obj[i].root_obj) continue;
int check_obj = check_library_root_obj(ctx, root_dynamic_obj[i].path, &dm_entryobj);
if ((check_obj == 0) || (!dm_entryobj)) continue;
if (dm_entryobj->nextdynamicobj == NULL) {
dm_entryobj->nextdynamicobj = calloc(__INDX_DYNAMIC_MAX, sizeof(struct dm_dynamic_obj));
dm_entryobj->nextdynamicobj[INDX_JSON_OBJ_MOUNT].isstatic = 0;
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].isstatic = 1;
}
if (dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj == NULL) {
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj = calloc(2, sizeof(struct dm_obj_s *));
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj[0] = root_dynamic_obj[i].root_obj;
} else {
int idx = get_index_of_available_dynamic_array(dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj);
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj = realloc(dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj, (idx + 2) * sizeof(struct dm_obj_s *));
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj[idx] = root_dynamic_obj[i].root_obj;
dm_entryobj->nextdynamicobj[INDX_LIBRARY_OBJ_MOUNT].nextobj[idx+1] = NULL;
}
}
}
//Dynamic Operate
*(void **) (&root_dynamic_operate) = dlsym(handle, "tRootDynamicOperate");
if(root_dynamic_operate) {
for (i = 0; root_dynamic_operate[i].path; i++) {
if (root_dynamic_operate[i].operate)
add_dynamic_operate(root_dynamic_operate[i].path, root_dynamic_operate[i].operate);
}
}
if (handle) dlclose(handle);
}
}
if (dir) closedir(dir);
}
return 0;
}

21
dmentrylibrary.h Normal file
View file

@ -0,0 +1,21 @@
/*
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
#ifndef __DMENTRYLIBRARY_H__
#define __DMENTRYLIBRARY_H__
#define LIBRARY_FOLDER_PATH "/usr/lib/bbfdm"
int check_stats_library_folder(char *library_folder_path);
int load_library_dynamic_arrays(struct dmctx *ctx);
int free_library_dynamic_arrays(DMOBJ *dm_entryobj);
#endif //__DMENTRYLIBRARY_H__

View file

@ -13,22 +13,12 @@
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <regex.h>
#include "dmbbf.h"
#include "dmubus.h"
#include "dmuci.h"
#include "dmjson.h"
#include "dmentry.h"
#include "dmcommon.h"
#include "dmoperate.h"
#include "dmdiagnostics.h"
#define GLOB_EXPR "[=><]+"
static uint8_t wifi_neighbor_count = 0;
struct op_cmd *dynamic_operate = NULL;
bool match(const char *string, const char *pattern)
{
@ -224,7 +214,7 @@ struct wifi_security_params reset_params[] = {
static opr_ret_t ap_security_reset(struct dmctx *dmctx, char *path, char *input)
{
char *wpakey = NULL;
char node[MAXNAMLEN] = {'\0'};
char node[255] = {'\0'};
int i, len = 0;
char *ret = strrchr(path, '.');
@ -233,20 +223,20 @@ static opr_ret_t ap_security_reset(struct dmctx *dmctx, char *path, char *input)
len = ARRAY_SIZE(reset_params);
for (i = 0; i < len; i++) {
strncpy(reset_params[i].node, node, MAXNAMLEN);
strncpy(reset_params[i].node, node, 255);
strcat(reset_params[i].node, reset_params[i].param);
}
const char *mode_enabled = "WPA2-Personal";
// Default mode - WPA2-Personal
strncpy(reset_params[0].value, mode_enabled, MAXNAMLEN);
strncpy(reset_params[0].value, mode_enabled, 255);
// Get Default wpakey
db_get_value_string("hw", "board", "wpaKey", &wpakey);
// PreSharedKey and KeyPassphrase are kept same
strncpy(reset_params[1].value, wpakey, MAXNAMLEN);
strncpy(reset_params[2].value, wpakey, MAXNAMLEN);
strncpy(reset_params[1].value, wpakey, 255);
strncpy(reset_params[2].value, wpakey, 255);
for (i = 0; i < len; i++) {
bbf_set_value(reset_params[i].node, reset_params[i].value);
@ -807,6 +797,31 @@ static opr_ret_t ip_diagnostics_nslookup(struct dmctx *dmctx, char *path, char *
return SUCCESS;
}
static int get_index_of_available_dynamic_operate(struct op_cmd *operate)
{
int idx = 0;
for (; (operate && operate->name); operate++) {
idx++;
}
return idx;
}
int add_dynamic_operate(char *path, operation operate)
{
if (dynamic_operate == NULL) {
dynamic_operate = calloc(2, sizeof(struct op_cmd));
dynamic_operate[0].name = path;
dynamic_operate[0].opt = operate;
} else {
int idx = get_index_of_available_dynamic_operate(dynamic_operate);
dynamic_operate = realloc(dynamic_operate, (idx + 2) * sizeof(struct op_cmd));
memset(dynamic_operate + (idx + 1), 0, sizeof(struct op_cmd));
dynamic_operate[idx].name = path;
dynamic_operate[idx].opt = operate;
}
return 0;
}
static struct op_cmd operate_helper[] = {
{"Device.Reboot", reboot_device},
{"Device.FactoryReset", factory_reset},
@ -829,15 +844,26 @@ static struct op_cmd operate_helper[] = {
{"Device.DNS.Diagnostics.NSLookupDiagnostics", ip_diagnostics_nslookup}
};
int operate_on_node(struct dmctx *dmctx, char *path, char *input)
opr_ret_t operate_on_node(struct dmctx *dmctx, char *path, char *input)
{
uint8_t len = 0;
uint8_t len = 0, i;
struct op_cmd *save_pointer = NULL;
if (dynamic_operate) save_pointer = dynamic_operate;
len = ARRAY_SIZE(operate_helper);
for(uint8_t i=0; i<len; i++) {
if(match(path, operate_helper[i].name)) {
for(i = 0; i < len; i++) {
if (match(path, operate_helper[i].name))
return(operate_helper[i].opt(dmctx, path, input));
}
for (; (dynamic_operate && dynamic_operate->name); dynamic_operate++) {
if (match(path, dynamic_operate->name)) {
opr_ret_t res = dynamic_operate->opt(dmctx, path, input);
if (save_pointer) dynamic_operate = save_pointer;
return res;
}
}
if (save_pointer) dynamic_operate = save_pointer;
return CMD_NOT_FOUND;
}

View file

@ -16,7 +16,18 @@
#ifndef __DMOPERATE_H__
#define __DMOPERATE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <regex.h>
#include <sys/param.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmjson.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "dmdiagnostics.h"
#define SYSTEM_UBUS_PATH "system"
#define NETWORK_INTERFACE_UBUS_PATH "network.interface"
@ -25,22 +36,12 @@
#define ICWMP_SCRIPT "/usr/sbin/icwmp"
#define VCF_FILE_TYPE "3"
enum operate_ret_status{
UBUS_INVALID_ARGUMENTS,
SUCCESS,
FAIL,
CMD_NOT_FOUND,
__STATUS_MAX,
};
typedef enum operate_ret_status opr_ret_t;
typedef opr_ret_t (*operation) (struct dmctx *dmctx, char *p, char *input);
extern struct op_cmd *dynamic_operate;
struct wifi_security_params {
char node[MAXNAMLEN];
char node[255];
char *param;
char value[MAXNAMLEN];
char value[255];
};
struct file_server {
@ -216,6 +217,7 @@ struct op_cmd {
operation opt;
};
int operate_on_node(struct dmctx *dmctx, char *path, char *input);
int add_dynamic_operate(char *path, operation operate);
opr_ret_t operate_on_node(struct dmctx *dmctx, char *path, char *input);
#endif

View file

@ -13,23 +13,23 @@
#include <ctype.h>
#include <uci.h>
#include <unistd.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "voice_services.h"
#include "dmjson.h"
/* *** Device.Services. *** */
DMOBJ tServicesObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"VoiceService", &DMREAD, NULL, NULL, NULL, browseVoiceServiceInst, NULL, NULL, NULL, tServicesVoiceServiceObj, tServicesVoiceServiceParams, NULL, BBFDM_BOTH},
{0}
};
/* *** Device.Services.VoiceService.{i}. *** */
DMOBJ tServicesVoiceServiceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Capabilities", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceCapabilitiesObj, tServicesVoiceServiceCapabilitiesParams, NULL, BBFDM_BOTH},
{"VoiceProfile", &DMWRITE, add_profile_object, delete_profile_object, NULL, browseProfileInst, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileObj, tServicesVoiceServiceVoiceProfileParams, NULL, BBFDM_BOTH},
{0}
@ -43,7 +43,7 @@ DMLEAF tServicesVoiceServiceParams[] = {
/* *** Device.Services.VoiceService.{i}.Capabilities. *** */
DMOBJ tServicesVoiceServiceCapabilitiesObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"SIP", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceCapabilitiesSIPParams, NULL, BBFDM_BOTH},
{"Codecs", &DMREAD, NULL, NULL, NULL, browseCodecsInst, NULL, NULL, NULL, NULL, tServicesVoiceServiceCapabilitiesCodecsParams, NULL, BBFDM_BOTH},
{0}
@ -111,7 +111,7 @@ DMLEAF tServicesVoiceServiceCapabilitiesCodecsParams[] = {
/* *** Device.Services.VoiceService.{i}.VoiceProfile.{i}. *** */
DMOBJ tServicesVoiceServiceVoiceProfileObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"SIP", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileSIPParams, NULL, BBFDM_BOTH},
{"ServiceProviderInfo", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileServiceProviderInfoParams, NULL, BBFDM_BOTH},
{"FaxT38", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileFaxT38Params, NULL, BBFDM_BOTH},
@ -172,7 +172,7 @@ DMLEAF tServicesVoiceServiceVoiceProfileFaxT38Params[] = {
/* *** Device.Services.VoiceService.{i}.VoiceProfile.{i}.RTP. *** */
DMOBJ tServicesVoiceServiceVoiceProfileRTPObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"RTCP", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileRTPRTCPParams, NULL, BBFDM_BOTH},
{"SRTP", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileRTPSRTPParams, NULL, BBFDM_BOTH},
{0}
@ -203,7 +203,7 @@ DMLEAF tServicesVoiceServiceVoiceProfileRTPSRTPParams[] = {
/* *** Device.Services.VoiceService.{i}.VoiceProfile.{i}.Line.{i}. *** */
DMOBJ tServicesVoiceServiceVoiceProfileLineObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"VoiceProcessing", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileLineVoiceProcessingParams, NULL, BBFDM_BOTH},
{"CallingFeatures", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileLineCallingFeaturesParams, NULL, BBFDM_BOTH},
{"SIP", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileLineSIPParams, NULL, BBFDM_BOTH},
@ -250,7 +250,7 @@ DMLEAF tServicesVoiceServiceVoiceProfileLineSIPParams[] = {
/* *** Device.Services.VoiceService.{i}.VoiceProfile.{i}.Line.{i}.Codec. *** */
DMOBJ tServicesVoiceServiceVoiceProfileLineCodecObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"List", &DMREAD, NULL, NULL, NULL, browseLineCodecListInst, NULL, NULL, NULL, NULL, tServicesVoiceServiceVoiceProfileLineCodecListParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -12,17 +12,17 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "diagnostics.h"
/* *** Device.IP.Diagnostics. *** */
DMOBJ tIPDiagnosticsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"IPPing", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tIPDiagnosticsIPPingParams, NULL, BBFDM_CWMP},
{"TraceRoute", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tIPDiagnosticsTraceRouteObj, tIPDiagnosticsTraceRouteParams, NULL, BBFDM_CWMP},
{"DownloadDiagnostics", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tIPDiagnosticsDownloadDiagnosticsObj, tIPDiagnosticsDownloadDiagnosticsParams, NULL, BBFDM_CWMP},
@ -74,7 +74,7 @@ DMLEAF tIPDiagnosticsIPPingParams[] = {
/* *** Device.IP.Diagnostics.TraceRoute. *** */
DMOBJ tIPDiagnosticsTraceRouteObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"RouteHops", &DMREAD, NULL, NULL, NULL, browseIPDiagnosticsTraceRouteRouteHopsInst, NULL, NULL, NULL, NULL, tIPDiagnosticsTraceRouteRouteHopsParams, NULL, BBFDM_CWMP},
{0}
};
@ -107,7 +107,7 @@ DMLEAF tIPDiagnosticsTraceRouteRouteHopsParams[] = {
/* *** Device.IP.Diagnostics.DownloadDiagnostics. *** */
DMOBJ tIPDiagnosticsDownloadDiagnosticsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"PerConnectionResult", &DMREAD, NULL, NULL, NULL, browseIPDiagnosticsDownloadDiagnosticsPerConnectionResultInst, NULL, NULL, NULL, NULL, tIPDiagnosticsDownloadDiagnosticsPerConnectionResultParams, NULL, BBFDM_CWMP},
{0}
};
@ -156,7 +156,7 @@ DMLEAF tIPDiagnosticsDownloadDiagnosticsPerConnectionResultParams[] = {
/* *** Device.IP.Diagnostics.UploadDiagnostics. *** */
DMOBJ tIPDiagnosticsUploadDiagnosticsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"PerConnectionResult", &DMREAD, NULL, NULL, NULL, browseIPDiagnosticsUploadDiagnosticsPerConnectionResultInst, NULL, NULL, NULL, NULL, tIPDiagnosticsUploadDiagnosticsPerConnectionResultParams, NULL, BBFDM_CWMP},
{0}
};

View file

@ -8,17 +8,17 @@
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmjson.h"
#include "dmentry.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
//#include "dmentry.h"
#include "bulkdata.h"
/* *** Device.BulkData. *** */
DMOBJ tBulkDataObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Profile", &DMWRITE, addObjBulkDataProfile, delObjBulkDataProfile, NULL, browseBulkDataProfileInst, NULL, NULL, NULL, tBulkDataProfileObj, tBulkDataProfileParams, NULL, BBFDM_BOTH},
{0}
};
@ -39,7 +39,7 @@ DMLEAF tBulkDataParams[] = {
/* *** Device.BulkData.Profile.{i}. *** */
DMOBJ tBulkDataProfileObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Parameter", &DMWRITE, addObjBulkDataProfileParameter, delObjBulkDataProfileParameter, NULL, browseBulkDataProfileParameterInst, NULL, NULL, NULL, NULL, tBulkDataProfileParameterParams, NULL, BBFDM_BOTH},
{"CSVEncoding", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tBulkDataProfileCSVEncodingParams, NULL, BBFDM_BOTH},
{"JSONEncoding", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tBulkDataProfileJSONEncodingParams, NULL, BBFDM_BOTH},
@ -98,7 +98,7 @@ DMLEAF tBulkDataProfileJSONEncodingParams[] = {
/* *** Device.BulkData.Profile.{i}.HTTP. *** */
DMOBJ tBulkDataProfileHTTPObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"RequestURIParameter", &DMWRITE, addObjBulkDataProfileHTTPRequestURIParameter, delObjBulkDataProfileHTTPRequestURIParameter, NULL, browseBulkDataProfileHTTPRequestURIParameterInst, NULL, NULL, NULL, NULL, tBulkDataProfileHTTPRequestURIParameterParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -8,17 +8,17 @@
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmjson.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "softwaremodules.h"
/* *** Device.SoftwareModules. *** */
DMOBJ tSoftwareModulesObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"ExecEnv", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesExecEnvInst, NULL, NULL, NULL, NULL, tSoftwareModulesExecEnvParams, get_exe_cenv_linker, BBFDM_BOTH},
{"DeploymentUnit", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesDeploymentUnitInst, NULL, NULL, NULL, NULL, tSoftwareModulesDeploymentUnitParams, get_du_linker, BBFDM_BOTH},
{"ExecutionUnit", &DMREAD, NULL, NULL, NULL, browseSoftwareModulesExecutionUnitInst, NULL, NULL, NULL, tSoftwareModulesExecutionUnitObj, tSoftwareModulesExecutionUnitParams, NULL, BBFDM_BOTH},
@ -80,7 +80,7 @@ DMLEAF tSoftwareModulesDeploymentUnitParams[] = {
/* *** Device.SoftwareModules.ExecutionUnit.{i}. *** */
DMOBJ tSoftwareModulesExecutionUnitObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Extensions", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, BBFDM_BOTH},
{0}
};

View file

@ -11,24 +11,24 @@
#include <ctype.h>
#include <uci.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include "atm.h"
#include "dmjson.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "atm.h"
/*** ATM. ***/
DMOBJ tATMObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Link", &DMWRITE, add_atm_link, delete_atm_link, NULL, browseAtmLinkInst, NULL, NULL, NULL, tATMLinkObj, tATMLinkParams, get_atm_linker, BBFDM_BOTH},
{0}
};
/*** ATM.Link. ***/
DMOBJ tATMLinkObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tATMLinkStatsParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -12,19 +12,19 @@
#include <ctype.h>
#include <uci.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include "bridging.h"
#include "dmjson.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "bridging.h"
static char *wan_baseifname = NULL;
/*** Bridging. ***/
DMOBJ tBridgingObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Bridge", &DMWRITE, add_bridge, delete_bridge, NULL, browseBridgeInst, NULL, NULL, NULL, tBridgingBridgeObj, tBridgingBridgeParams, NULL, BBFDM_BOTH},
{0}
};
@ -43,7 +43,7 @@ DMLEAF tBridgingParams[] = {
/*** Bridging.Bridge.{i}. ***/
DMOBJ tBridgingBridgeObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Port", &DMWRITE, add_br_port, delete_br_port, NULL, browseBridgePortInst, NULL, NULL, NULL, tBridgingBridgePortObj, tBridgingBridgePortParams, get_linker_br_port, BBFDM_BOTH},
{"VLAN", &DMWRITE, add_br_vlan, delete_br_vlan, NULL, browseBridgeVlanInst, NULL, NULL, NULL, NULL, tBridgingBridgeVLANParams, get_linker_br_vlan, BBFDM_BOTH},
{"VLANPort", &DMREAD, NULL, NULL, NULL, browseBridgeVlanPortInst, NULL, NULL, NULL, NULL, tBridgingBridgeVLANPortParams, NULL, BBFDM_BOTH},
@ -65,7 +65,7 @@ DMLEAF tBridgingBridgeParams[] = {
/*** Bridging.Bridge.{i}.Port.{i}. ***/
DMOBJ tBridgingBridgePortObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tBridgingBridgePortStatsParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -11,8 +11,8 @@
#ifndef __DATAMODELVERSION_H
#define __DATAMODELVERSION_H
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
int get_Device_RootDataModelVersion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);

View file

@ -10,8 +10,8 @@
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include "dmuci.h"
#include "dmbbf.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmbbf.h>
#include "device.h"
#include "deviceinfo.h"
#include "managementserver.h"
@ -61,7 +61,7 @@
/* *** BBFDM *** */
DMOBJ tEntry181Obj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Device", &DMREAD, NULL, NULL, NULL, NULL, &DMFINFRM, &DMNONE, NULL, tRoot_181_Obj, tRoot_181_Params, NULL, BBFDM_BOTH},
{0}
};
@ -74,7 +74,7 @@ DMLEAF tRoot_181_Params[] = {
};
DMOBJ tRoot_181_Obj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"DeviceInfo", &DMREAD, NULL, NULL, NULL, NULL, &DMFINFRM, &DMNONE, NULL, tDeviceInfoObj, tDeviceInfoParams, NULL, BBFDM_BOTH},
{"ManagementServer", &DMREAD, NULL, NULL, NULL, NULL, &DMFINFRM, &DMNONE, NULL, NULL, tManagementServerParams, NULL, BBFDM_BOTH},
{"Time", &DMREAD, NULL, NULL, NULL, NULL, NULL, &DMNONE, NULL, NULL, tTimeParams, NULL, BBFDM_BOTH},

View file

@ -16,16 +16,16 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/klog.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmcommon.h>
#include "deviceinfo.h"
#include "dmjson.h"
#include "dmubus.h"
#include <libbbf_api/dmjson.h>
#include <libbbf_api/dmubus.h>
/* *** Device.DeviceInfo. *** */
DMOBJ tDeviceInfoObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{CUSTOM_PREFIX"CATV", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tCatTvParams, NULL, BBFDM_BOTH},
{"VendorConfigFile", &DMREAD, NULL, NULL, NULL, browseVcfInst, NULL, NULL, NULL, NULL, tDeviceInfoVendorConfigFileParams, NULL, BBFDM_BOTH},
{"VendorLogFile", &DMREAD, NULL, NULL, NULL, browseVlfInst, NULL, NULL, NULL, NULL, tDeviceInfoVendorLogFileParams, NULL, BBFDM_BOTH},
@ -75,7 +75,7 @@ DMLEAF tDeviceInfoMemoryStatusParams[] = {
/* *** Device.DeviceInfo.ProcessStatus. *** */
DMOBJ tDeviceInfoProcessStatusObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Process", &DMREAD, NULL, NULL, NULL, browsePocessEntriesInst, NULL, NULL, NULL, NULL, tDeviceInfoProcessStatusProcessParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -12,7 +12,7 @@
#ifndef __DEVICE_INFO_H
#define __DEVICE_INFO_H
#include "dmbbf.h"
#include <libbbf_api/dmbbf.h>
#define UPTIME "/proc/uptime"
#define DEFAULT_CONFIG_DIR "/etc/config/"

View file

@ -14,18 +14,19 @@
#include <stdio.h>
#include <ctype.h>
#include <arpa/inet.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "dhcpv4.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "dhcpv4.h"
#define DELIMITOR ","
/*** DHCPv4. ***/
DMOBJ tDHCPv4Obj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Client", &DMWRITE, addObjDHCPv4Client, delObjDHCPv4Client, NULL, browseDHCPv4ClientInst, NULL, NULL, NULL, tDHCPv4ClientObj, tDHCPv4ClientParams, NULL, BBFDM_BOTH},
{"Server", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDHCPv4ServerObj, tDHCPv4ServerParams, NULL, BBFDM_BOTH},
{"Relay", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDHCPv4RelayObj, tDHCPv4RelayParams, NULL, BBFDM_BOTH},
@ -40,7 +41,7 @@ DMLEAF tDHCPv4Params[] = {
/* *** Device.DHCPv4.Client.{i}. *** */
DMOBJ tDHCPv4ClientObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"SentOption", &DMWRITE, addObjDHCPv4ClientSentOption, delObjDHCPv4ClientSentOption, NULL, browseDHCPv4ClientSentOptionInst, NULL, NULL, NULL, NULL, tDHCPv4ClientSentOptionParams, NULL, BBFDM_BOTH},
{"ReqOption", &DMWRITE, addObjDHCPv4ClientReqOption, delObjDHCPv4ClientReqOption, NULL, browseDHCPv4ClientReqOptionInst, NULL, NULL, NULL, NULL, tDHCPv4ClientReqOptionParams, NULL, BBFDM_BOTH},
{0}
@ -97,14 +98,14 @@ DMLEAF tDHCPv4ServerParams[] = {
/*** DHCPv4.Server. ***/
DMOBJ tDHCPv4ServerObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Pool", &DMWRITE, add_dhcp_server, delete_dhcp_server, NULL, browseDhcpInst, NULL, NULL, NULL, tDHCPv4ServerPoolObj, tDHCPv4ServerPoolParams, NULL, BBFDM_BOTH},
{0}
};
/*** DHCPv4.Server.Pool.{i}. ***/
DMOBJ tDHCPv4ServerPoolObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"StaticAddress", &DMWRITE, add_dhcp_staticaddress, delete_dhcp_staticaddress, NULL, browseDhcpStaticInst, NULL, NULL, NULL, NULL, tDHCPv4ServerPoolAddressParams, NULL, BBFDM_BOTH},
{"Option", &DMWRITE, addObjDHCPv4ServerPoolOption, delObjDHCPv4ServerPoolOption, NULL, browseDHCPv4ServerPoolOptionInst, NULL, NULL, NULL, NULL, tDHCPv4ServerPoolOptionParams, NULL, BBFDM_BOTH},
{"Client", &DMREAD, NULL, NULL, NULL, browseDhcpClientInst, NULL, NULL, NULL, tDHCPv4ServerPoolClientObj, tDHCPv4ServerPoolClientParams, get_dhcp_client_linker},
@ -113,7 +114,7 @@ DMOBJ tDHCPv4ServerPoolObj[] = {
/*** DHCPv4.Server.Pool.{i}.Client.{i}. ***/
DMOBJ tDHCPv4ServerPoolClientObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"IPv4Address", &DMREAD, NULL, NULL, NULL, browseDhcpClientIPv4Inst, NULL, NULL, NULL, NULL, tDHCPv4ServerPoolClientIPv4AddressParams, NULL, BBFDM_BOTH},
{"Option", &DMREAD, NULL, NULL, NULL, browseDHCPv4ServerPoolClientOptionInst, NULL, NULL, NULL, NULL, tDHCPv4ServerPoolClientOptionParams, NULL, BBFDM_BOTH},
{0}
@ -186,7 +187,7 @@ DMLEAF tDHCPv4ServerPoolClientOptionParams[] = {
/* *** Device.DHCPv4.Relay. *** */
DMOBJ tDHCPv4RelayObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Forwarding", &DMWRITE, addObjDHCPv4RelayForwarding, delObjDHCPv4RelayForwarding, NULL, browseDHCPv4RelayForwardingInst, NULL, NULL, NULL, NULL, tDHCPv4RelayForwardingParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -11,18 +11,19 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "dhcpv4.h"
#include "dhcpv6.h"
#include "dmjson.h"
/* *** Device.DHCPv6. *** */
DMOBJ tDHCPv6Obj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Client", &DMWRITE, addObjDHCPv6Client, delObjDHCPv6Client, NULL, browseDHCPv6ClientInst, NULL, NULL, NULL, tDHCPv6ClientObj, tDHCPv6ClientParams, NULL, BBFDM_BOTH},
{"Server", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDHCPv6ServerObj, tDHCPv6ServerParams, NULL, BBFDM_BOTH},
{0}
@ -36,7 +37,7 @@ DMLEAF tDHCPv6Params[] = {
/* *** Device.DHCPv6.Client.{i}. *** */
DMOBJ tDHCPv6ClientObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Server", &DMREAD, NULL, NULL, NULL, browseDHCPv6ClientServerInst, NULL, NULL, NULL, NULL, tDHCPv6ClientServerParams, NULL, BBFDM_BOTH},
{"SentOption", &DMWRITE, addObjDHCPv6ClientSentOption, delObjDHCPv6ClientSentOption, NULL, browseDHCPv6ClientSentOptionInst, NULL, NULL, NULL, NULL, tDHCPv6ClientSentOptionParams, NULL, BBFDM_BOTH},
{"ReceivedOption", &DMREAD, NULL, NULL, NULL, browseDHCPv6ClientReceivedOptionInst, NULL, NULL, NULL, NULL, tDHCPv6ClientReceivedOptionParams, NULL, BBFDM_BOTH},
@ -94,7 +95,7 @@ DMLEAF tDHCPv6ClientReceivedOptionParams[] = {
/* *** Device.DHCPv6.Server. *** */
DMOBJ tDHCPv6ServerObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Pool", &DMWRITE, addObjDHCPv6ServerPool, delObjDHCPv6ServerPool, NULL, browseDHCPv6ServerPoolInst, NULL, NULL, NULL, tDHCPv6ServerPoolObj, tDHCPv6ServerPoolParams, NULL, BBFDM_BOTH},
{0}
};
@ -108,7 +109,7 @@ DMLEAF tDHCPv6ServerParams[] = {
/* *** Device.DHCPv6.Server.Pool.{i}. *** */
DMOBJ tDHCPv6ServerPoolObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Client", &DMREAD, NULL, NULL, NULL, browseDHCPv6ServerPoolClientInst, NULL, NULL, NULL, tDHCPv6ServerPoolClientObj, tDHCPv6ServerPoolClientParams, NULL, BBFDM_BOTH},
{"Option", &DMWRITE, addObjDHCPv6ServerPoolOption, delObjDHCPv6ServerPoolOption, NULL, browseDHCPv6ServerPoolOptionInst, NULL, NULL, NULL, NULL, tDHCPv6ServerPoolOptionParams, NULL, BBFDM_BOTH},
{0}
@ -144,7 +145,7 @@ DMLEAF tDHCPv6ServerPoolParams[] = {
/* *** Device.DHCPv6.Server.Pool.{i}.Client.{i}. *** */
DMOBJ tDHCPv6ServerPoolClientObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"IPv6Address", &DMREAD, NULL, NULL, NULL, browseDHCPv6ServerPoolClientIPv6AddressInst, NULL, NULL, NULL, NULL, tDHCPv6ServerPoolClientIPv6AddressParams, NULL, BBFDM_BOTH},
{"IPv6Prefix", &DMREAD, NULL, NULL, NULL, browseDHCPv6ServerPoolClientIPv6PrefixInst, NULL, NULL, NULL, NULL, tDHCPv6ServerPoolClientIPv6PrefixParams, NULL, BBFDM_BOTH},
{"Option", &DMREAD, NULL, NULL, NULL, browseDHCPv6ServerPoolClientOptionInst, NULL, NULL, NULL, NULL, tDHCPv6ServerPoolClientOptionParams, NULL, BBFDM_BOTH},

View file

@ -8,17 +8,17 @@
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "dns.h"
/* *** Device.DNS. *** */
DMOBJ tDNSObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Client", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDNSClientObj, tDNSClientParams, NULL, BBFDM_BOTH},
{"Relay", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDNSRelayObj, tDNSRelayParams, NULL, BBFDM_BOTH},
{"Diagnostics", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDNSDiagnosticsObj, NULL, NULL, BBFDM_BOTH},
@ -33,7 +33,7 @@ DMLEAF tDNSParams[] = {
/* *** Device.DNS.Client. *** */
DMOBJ tDNSClientObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Server", &DMWRITE, add_client_server, delete_client_server, NULL, browseServerInst, NULL, NULL, NULL, NULL, tDNSClientServerParams, NULL, BBFDM_BOTH},
{0}
};
@ -60,7 +60,7 @@ DMLEAF tDNSClientServerParams[] = {
/* *** Device.DNS.Relay. *** */
DMOBJ tDNSRelayObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Forwarding", &DMWRITE, add_relay_forwarding, delete_relay_forwarding, NULL, browseRelayForwardingInst, NULL, NULL, NULL, NULL, tDNSRelayForwardingParams, NULL, BBFDM_BOTH},
{0}
};
@ -87,14 +87,14 @@ DMLEAF tDNSRelayForwardingParams[] = {
/* *** Device.DNS.Diagnostics. *** */
DMOBJ tDNSDiagnosticsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"NSLookupDiagnostics", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDNSDiagnosticsNSLookupDiagnosticsObj, tDNSDiagnosticsNSLookupDiagnosticsParams, NULL, BBFDM_BOTH},
{0}
};
/* *** Device.DNS.Diagnostics.NSLookupDiagnostics. *** */
DMOBJ tDNSDiagnosticsNSLookupDiagnosticsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Result", &DMREAD, NULL, NULL, NULL, browseResultInst, NULL, NULL, NULL, NULL, tDNSDiagnosticsNSLookupDiagnosticsResultParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -11,11 +11,11 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "dsl.h"
@ -23,7 +23,7 @@
/* *** Device.DSL. *** */
DMOBJ tDSLObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Line", &DMREAD, NULL, NULL, NULL, browseDSLLineInst, NULL, NULL, NULL, tDSLLineObj, tDSLLineParams, get_dsl_line_linker, BBFDM_BOTH},
{"Channel", &DMREAD, NULL, NULL, NULL, browseDSLChannelInst, NULL, NULL, NULL, tDSLChannelObj, tDSLChannelParams, get_dsl_channel_linker, BBFDM_BOTH},
{0}
@ -38,7 +38,7 @@ DMLEAF tDSLParams[] = {
/* *** Device.DSL.Line.{i}. *** */
DMOBJ tDSLLineObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLLineStatsObj, tDSLLineStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -98,7 +98,7 @@ DMLEAF tDSLLineParams[] = {
/* *** Device.DSL.Line.{i}.Stats. *** */
DMOBJ tDSLLineStatsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Total", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLLineStatsTotalParams, NULL, BBFDM_BOTH},
{"Showtime", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLLineStatsShowtimeParams, NULL, BBFDM_BOTH},
{"LastShowtime", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLLineStatsLastShowtimeParams, NULL, BBFDM_BOTH},
@ -159,7 +159,7 @@ DMLEAF tDSLLineStatsQuarterHourParams[] = {
/* *** Device.DSL.Channel.{i}. *** */
DMOBJ tDSLChannelObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLChannelStatsObj, tDSLChannelStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -191,7 +191,7 @@ DMLEAF tDSLChannelParams[] = {
/* *** Device.DSL.Channel.{i}.Stats. *** */
DMOBJ tDSLChannelStatsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Total", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLChannelStatsTotalParams, NULL, BBFDM_BOTH},
{"Showtime", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLChannelStatsShowtimeParams, NULL, BBFDM_BOTH},
{"LastShowtime", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDSLChannelStatsLastShowtimeParams, NULL, BBFDM_BOTH},

View file

@ -9,17 +9,17 @@
*/
#include <stdbool.h>
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmjson.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "dynamicdns.h"
/* *** Device.DynamicDNS. *** */
DMOBJ tDynamicDNSObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Client", &DMWRITE, addObjDynamicDNSClient, delObjDynamicDNSClient, NULL, browseDynamicDNSClientInst, NULL, NULL, NULL, tDynamicDNSClientObj, tDynamicDNSClientParams, NULL, BBFDM_BOTH},
{"Server", &DMWRITE, addObjDynamicDNSServer, delObjDynamicDNSServer, NULL, browseDynamicDNSServerInst, NULL, NULL, NULL, NULL, tDynamicDNSServerParams, get_linker_dynamicdns_server, BBFDM_BOTH},
{0}
@ -35,7 +35,7 @@ DMLEAF tDynamicDNSParams[] = {
/* *** Device.DynamicDNS.Client.{i}. *** */
DMOBJ tDynamicDNSClientObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Hostname", &DMWRITE, NULL, NULL, NULL, browseDynamicDNSClientHostnameInst, NULL, NULL, NULL, NULL, tDynamicDNSClientHostnameParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -13,19 +13,19 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "ethernet.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "ethernet.h"
char *wan_ifname = NULL;
/* *** Device.Ethernet. *** */
DMOBJ tEthernetObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Interface", &DMREAD, NULL, NULL, NULL, browseEthernetInterfaceInst, NULL, NULL, NULL, tEthernetInterfaceObj, tEthernetInterfaceParams, get_linker_interface, BBFDM_BOTH},
{"Link", &DMWRITE, addObjEthernetLink, delObjEthernetLink, NULL, browseEthernetLinkInst, NULL, NULL, NULL, tEthernetLinkObj, tEthernetLinkParams, get_linker_link, BBFDM_BOTH},
{"VLANTermination", &DMWRITE, addObjEthernetVLANTermination, delObjEthernetVLANTermination, NULL, browseEthernetVLANTerminationInst, NULL, NULL, NULL, tEthernetVLANTerminationObj, tEthernetVLANTerminationParams, get_linker_vlan_term, BBFDM_BOTH},
@ -42,7 +42,7 @@ DMLEAF tEthernetParams[] = {
/* *** Device.Ethernet.Interface.{i}. *** */
DMOBJ tEthernetInterfaceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tEthernetInterfaceStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -87,7 +87,7 @@ DMLEAF tEthernetInterfaceStatsParams[] = {
/* *** Device.Ethernet.Link.{i}. *** */
DMOBJ tEthernetLinkObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tEthernetLinkStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -127,7 +127,7 @@ DMLEAF tEthernetLinkStatsParams[] = {
/* *** Device.Ethernet.VLANTermination.{i}. *** */
DMOBJ tEthernetVLANTerminationObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tEthernetVLANTerminationStatsParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -8,14 +8,14 @@
* Author: Omar Kallel <omar.kallel@pivasoftware.com>
*/
#include "dmbbf.h"
#include "firewall.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "firewall.h"
/* *** Device.Firewall. *** */
DMOBJ tFirewallObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Level", &DMREAD, NULL, NULL, NULL, browseLevelInst, NULL, NULL, NULL, NULL, tFirewallLevelParams, NULL, BBFDM_BOTH},
{"Chain", &DMREAD, NULL, NULL, NULL, browseChainInst, NULL, NULL, NULL, tFirewallChainObj, tFirewallChainParams, NULL, BBFDM_BOTH},
{0}
@ -44,7 +44,7 @@ DMLEAF tFirewallLevelParams[] = {
/* *** Device.Firewall.Chain.{i}. *** */
DMOBJ tFirewallChainObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Rule", &DMWRITE, add_firewall_rule, delete_firewall_rule, NULL, browseRuleInst, NULL, NULL, NULL, tFirewallChainRuleObj, tFirewallChainRuleParams, NULL, BBFDM_BOTH},
{0}
};
@ -60,7 +60,7 @@ DMLEAF tFirewallChainParams[] = {
/* *** Device.Firewall.Chain.{i}.Rule.{i}. *** */
DMOBJ tFirewallChainRuleObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{CUSTOM_PREFIX"TimeSpan", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tTimeSpanParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -10,12 +10,11 @@
#include <ctype.h>
#include <uci.h>
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmjson.h"
#include "dmentry.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include "gre.h"
/* *** Device.GRE. *** */

View file

@ -12,17 +12,17 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "hosts.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "hosts.h"
/* *** Device.Hosts. *** */
DMOBJ tHostsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Host", &DMREAD, NULL, NULL, NULL, browsehostInst, NULL, NULL, NULL, NULL, tHostsHostParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -8,10 +8,10 @@
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmubus.h"
#include "dmjson.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "interfacestack.h"

View file

@ -13,12 +13,12 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "ip.h"
#include "dmjson.h"
#include "dmentry.h"
#ifdef BBF_TR143
#include "diagnostics.h"
@ -29,7 +29,7 @@ struct dm_forced_inform_s IPv6INFRM = {0, get_ipv6_finform};
/* *** Device.IP. *** */
DMOBJ tIPObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Interface", &DMWRITE, add_ip_interface, delete_ip_interface, NULL, browseIPIfaceInst, NULL, NULL, NULL, tIPInterfaceObj, tIPInterfaceParams, get_linker_ip_interface, BBFDM_BOTH},
#ifdef BBF_TR143
{"Diagnostics", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tIPDiagnosticsObj, tIPDiagnosticsParams, NULL, BBFDM_BOTH},
@ -52,7 +52,7 @@ DMLEAF tIPParams[] = {
/* *** Device.IP.Interface. *** */
DMOBJ tIPInterfaceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"IPv4Address", &DMWRITE, add_ipv4, delete_ipv4, NULL, browseIfaceIPv4Inst, NULL, NULL, NULL, NULL, tIPInterfaceIPv4AddressParams, NULL, BBFDM_BOTH},
{"IPv6Address", &DMWRITE, add_ipv6, delete_ipv6, NULL, browseIfaceIPv6Inst, NULL, NULL, NULL, NULL, tIPInterfaceIPv6AddressParams, NULL, BBFDM_BOTH},
{"IPv6Prefix", &DMWRITE, add_ipv6_prefix, delete_ipv6_prefix, NULL, browseIfaceIPv6PrefixInst, NULL, NULL, NULL, NULL, tIPInterfaceIPv6PrefixParams, get_linker_ipv6_prefix, BBFDM_BOTH},

View file

@ -14,13 +14,13 @@
#include <uci.h>
#include <stdio.h>
#include <time.h>
#include "dmmem.h"
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmmem.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "managementserver.h"
#include "dmjson.h"
#define DEFAULT_ACSURL "http://192.168.1.1:8080/openacs/acs"

View file

@ -11,7 +11,7 @@
#ifndef __MANAGEMENT_SERVER_H
#define __MANAGEMENT_SERVER_H
#include "dmbbf.h"
#include <libbbf_api/dmbbf.h>
extern DMLEAF tManagementServerParams[];
int get_management_server_url(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);

View file

@ -13,16 +13,16 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "nat.h"
/* *** Device.NAT. *** */
DMOBJ tNATObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"InterfaceSetting", &DMWRITE, add_NAT_InterfaceSetting, delete_NAT_InterfaceSetting, NULL, browseInterfaceSettingInst, NULL, NULL, NULL, NULL, tNATInterfaceSettingParams, NULL, BBFDM_BOTH},
{"PortMapping", &DMWRITE, add_NAT_PortMapping, delete_NAT_PortMapping, NULL, browsePortMappingInst, NULL, NULL, NULL, NULL, tNATPortMappingParams, NULL, BBFDM_BOTH},
{0}

View file

@ -12,17 +12,17 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmjson.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmjson.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "ppp.h"
/* *** Device.PPP. *** */
DMOBJ tPPPObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Interface", &DMWRITE, add_ppp_interface, delete_ppp_interface, NULL, browseInterfaceInst, NULL, NULL, NULL, tPPPInterfaceObj, tPPPInterfaceParams, get_linker_ppp_interface, BBFDM_BOTH},
{0}
};
@ -35,7 +35,7 @@ DMLEAF tPPPParams[] = {
/* *** Device.PPP.Interface.{i}. *** */
DMOBJ tPPPInterfaceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"PPPoE", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tPPPInterfacePPPoEParams, NULL, BBFDM_BOTH},
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tPPPInterfaceStatsParams, NULL, BBFDM_BOTH},
{0}

View file

@ -11,24 +11,24 @@
#include <ctype.h>
#include <uci.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include "ptm.h"
#include "dmjson.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "ptm.h"
/* *** Device.PTM. *** */
DMOBJ tPTMObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Link", &DMWRITE, add_ptm_link, delete_ptm_link, NULL, browsePtmLinkInst, NULL, NULL, NULL, tPTMLinkObj, tPTMLinkParams, get_ptm_linker, BBFDM_BOTH},
{0}
};
/* *** Device.PTM.Link.{i}. *** */
DMOBJ tPTMLinkObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tPTMLinkStatsParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -8,16 +8,16 @@
* Author: Omar Kallel <omar.kallel@pivasoftware.com>
*/
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmentry.h"
#include "dmuci.h"
#include "qos.h"
#include <regex.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include "dmentry.h"
#include "qos.h"
/* *** Device.QoS. *** */
DMOBJ tQoSObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Classification", &DMWRITE, addObjQoSClassification, delObjQoSClassification, NULL, browseQoSClassificationInst, NULL, NULL, NULL, NULL, tQoSClassificationParams, NULL, BBFDM_BOTH},
{"App", &DMWRITE, addObjQoSApp, delObjQoSApp, NULL, browseQoSAppInst, NULL, NULL, NULL, NULL, tQoSAppParams, NULL, BBFDM_BOTH},
{"Flow", &DMWRITE, addObjQoSFlow, delObjQoSFlow, NULL, browseQoSFlowInst, NULL, NULL, NULL, NULL, tQoSFlowParams, NULL, BBFDM_BOTH},

View file

@ -14,12 +14,12 @@
#include <ctype.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "routing.h"
#include "dmjson.h"
#include "dmentry.h"
enum enum_route_type {
@ -30,7 +30,7 @@ enum enum_route_type {
/* *** Device.Routing. *** */
DMOBJ tRoutingObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Router", &DMREAD, NULL, NULL, NULL, browseRouterInst, NULL, NULL, NULL, tRoutingRouterObj, tRoutingRouterParams, NULL, BBFDM_BOTH},
{"RouteInformation", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tRoutingRouteInformationObj, tRoutingRouteInformationParams, NULL, BBFDM_BOTH},
{0}
@ -44,7 +44,7 @@ DMLEAF tRoutingParams[] = {
/* *** Device.Routing.Router.{i}. *** */
DMOBJ tRoutingRouterObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"IPv4Forwarding", &DMWRITE, add_ipv4forwarding, delete_ipv4forwarding, NULL, browseIPv4ForwardingInst, NULL, NULL, NULL, NULL, tRoutingRouterIPv4ForwardingParams, NULL, BBFDM_BOTH},
{"IPv6Forwarding", &DMWRITE, add_ipv6Forwarding, delete_ipv6Forwarding, NULL, browseIPv6ForwardingInst, NULL, NULL, NULL, NULL, tRoutingRouterIPv6ForwardingParams, NULL, BBFDM_BOTH},
{0}
@ -95,7 +95,7 @@ DMLEAF tRoutingRouterIPv6ForwardingParams[] = {
/* *** Device.Routing.RouteInformation. *** */
DMOBJ tRoutingRouteInformationObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"InterfaceSetting", &DMREAD, NULL, NULL, NULL, browseRoutingRouteInformationInterfaceSettingInst, NULL, NULL, NULL, NULL, tRoutingRouteInformationInterfaceSettingParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -11,10 +11,10 @@
#include <uci.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmbbf.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "times.h"

View file

@ -11,7 +11,7 @@
#ifndef __TIMES_H
#define __TIMES_H
#include "dmbbf.h"
#include <libbbf_api/dmbbf.h>
extern DMLEAF tTimeParams[];

View file

@ -12,15 +12,15 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "upnp.h"
/* *** Device.UPnP. *** */
DMOBJ tUPnPObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Device", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUPnPDeviceParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -9,15 +9,15 @@
*/
#include <dirent.h>
#include "dmbbf.h"
#include "dmcommon.h"
#include "dmuci.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmuci.h>
#include "dmentry.h"
#include "usb.h"
/* *** Device.USB. *** */
DMOBJ tUSBObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Interface", &DMREAD, NULL, NULL, NULL, browseUSBInterfaceInst, NULL, NULL, NULL, tUSBInterfaceObj, tUSBInterfaceParams, NULL, BBFDM_BOTH},
{"Port", &DMREAD, NULL, NULL, NULL, browseUSBPortInst, NULL, NULL, NULL, NULL, tUSBPortParams, get_linker_usb_port, BBFDM_BOTH},
{"USBHosts", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUSBUSBHostsObj, tUSBUSBHostsParams, NULL, BBFDM_BOTH},
@ -33,7 +33,7 @@ DMLEAF tUSBParams[] = {
/* *** Device.USB.Interface.{i}. *** */
DMOBJ tUSBInterfaceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUSBInterfaceStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -89,7 +89,7 @@ DMLEAF tUSBPortParams[] = {
/* *** Device.USB.USBHosts. *** */
DMOBJ tUSBUSBHostsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Host", &DMREAD, NULL, NULL, NULL, browseUSBUSBHostsHostInst, NULL, NULL, NULL, tUSBUSBHostsHostObj, tUSBUSBHostsHostParams, NULL, BBFDM_BOTH},
{0}
};
@ -102,7 +102,7 @@ DMLEAF tUSBUSBHostsParams[] = {
/* *** Device.USB.USBHosts.Host.{i}. *** */
DMOBJ tUSBUSBHostsHostObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Device", &DMREAD, NULL, NULL, NULL, browseUSBUSBHostsHostDeviceInst, NULL, NULL, NULL, tUSBUSBHostsHostDeviceObj, tUSBUSBHostsHostDeviceParams, get_linker_usb_host_device, BBFDM_BOTH},
{0}
};
@ -122,7 +122,7 @@ DMLEAF tUSBUSBHostsHostParams[] = {
/* *** Device.USB.USBHosts.Host.{i}.Device.{i}. *** */
DMOBJ tUSBUSBHostsHostDeviceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Configuration", &DMREAD, NULL, NULL, NULL, browseUSBUSBHostsHostDeviceConfigurationInst, NULL, NULL, NULL, tUSBUSBHostsHostDeviceConfigurationObj, tUSBUSBHostsHostDeviceConfigurationParams, NULL, BBFDM_BOTH},
{0}
};
@ -153,7 +153,7 @@ DMLEAF tUSBUSBHostsHostDeviceParams[] = {
/* *** Device.USB.USBHosts.Host.{i}.Device.{i}.Configuration.{i}. *** */
DMOBJ tUSBUSBHostsHostDeviceConfigurationObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Interface", &DMREAD, NULL, NULL, NULL, browseUSBUSBHostsHostDeviceConfigurationInterfaceInst, NULL, NULL, NULL, NULL, tUSBUSBHostsHostDeviceConfigurationInterfaceParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -13,16 +13,16 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmjson.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmjson.h>
#include <libbbf_api/dmcommon.h>
#include "userinterface.h"
/* *** Device.UserInterface. *** */
DMOBJ tUserInterfaceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"RemoteAccess", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tUserInterfaceRemoteAccessParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -9,13 +9,13 @@
* Author: Omar Kallel <omar.kallel@pivasoftware.com>
*/
#include "dmbbf.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "users.h"
#include "dmcommon.h"
/* *** Device.Users. *** */
DMOBJ tUsersObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"User", &DMWRITE, add_users_user, delete_users_user, NULL, browseUserInst, NULL, NULL, NULL, NULL, tUsersUserParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -11,7 +11,7 @@
#ifndef _USERS_H
#define _USERS_H
#include "dmbbf.h"
#include <libbbf_api/dmbbf.h>
extern DMOBJ tUsersObj[];
extern DMLEAF tUsersParams[];

View file

@ -13,19 +13,20 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include "wifi.h"
#include "dmjson.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include <libbbf_api/dmjson.h>
#include "dmentry.h"
#include "wepkey.h"
#include "wifi.h"
#define DELIMITOR ","
/* *** Device.WiFi. *** */
DMOBJ tWiFiObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Radio", &DMREAD, NULL, NULL, NULL, browseWifiRadioInst, NULL, NULL, NULL, tWiFiRadioObj, tWiFiRadioParams, get_linker_Wifi_Radio, BBFDM_BOTH},
{"SSID", &DMWRITE, add_wifi_ssid, delete_wifi_ssid, NULL, browseWifiSsidInst, NULL, NULL, NULL, tWiFiSSIDObj, tWiFiSSIDParams, get_linker_Wifi_Ssid, BBFDM_BOTH},
{"AccessPoint", &DMREAD, NULL, NULL, NULL, browseWifiAccessPointInst, NULL, NULL, NULL, tWiFiAccessPointObj, tWiFiAccessPointParams, NULL, BBFDM_BOTH},
@ -46,7 +47,7 @@ DMLEAF tWiFiParams[] = {
/* *** Device.WiFi.Radio.{i}. *** */
DMOBJ tWiFiRadioObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiRadioStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -104,7 +105,7 @@ DMLEAF tWiFiRadioStatsParams[] = {
/* *** Device.WiFi.NeighboringWiFiDiagnostic. *** */
DMOBJ tWiFiNeighboringWiFiDiagnosticObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Result", &DMREAD, NULL, NULL, NULL, browseWifiNeighboringWiFiDiagnosticResultInst, NULL, NULL, NULL, NULL, tWiFiNeighboringWiFiDiagnosticResultParams, NULL, BBFDM_CWMP},
{0}
};
@ -130,7 +131,7 @@ DMLEAF tWiFiNeighboringWiFiDiagnosticResultParams[] = {
/* *** Device.WiFi.SSID.{i}. *** */
DMOBJ tWiFiSSIDObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiSSIDStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -170,7 +171,7 @@ DMLEAF tWiFiSSIDStatsParams[] = {
/* *** Device.WiFi.AccessPoint.{i}. *** */
DMOBJ tWiFiAccessPointObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Security", &DMWRITE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiAccessPointSecurityParams, NULL, BBFDM_BOTH},
{"AssociatedDevice", &DMREAD, NULL, NULL, NULL, browse_wifi_associated_device, NULL, NULL, NULL, tWiFiAccessPointAssociatedDeviceObj, tWiFiAccessPointAssociatedDeviceParams, get_linker_associated_device, BBFDM_BOTH},
{"WPS", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiAccessPointWPSParams, NULL, BBFDM_BOTH},
@ -230,7 +231,7 @@ DMLEAF tWiFiAccessPointWPSParams[] = {
/* *** Device.WiFi.AccessPoint.{i}.AssociatedDevice.{i}. *** */
DMOBJ tWiFiAccessPointAssociatedDeviceObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiAccessPointAssociatedDeviceStatsParams, NULL, BBFDM_BOTH},
{0}
};
@ -286,7 +287,7 @@ DMLEAF tWiFiAcessPointIEEE80211rParams[] = {
/* *** Device.WiFi.EndPoint.{i}. *** */
DMOBJ tWiFiEndPointObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiEndPointStatsParams, NULL, BBFDM_BOTH},
{"Security", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiEndPointSecurityParams, NULL, BBFDM_BOTH},
{"Profile", &DMREAD, NULL, NULL, NULL, browseWiFiEndPointProfileInst, NULL, NULL, NULL, tWiFiEndPointProfileObj, tWiFiEndPointProfileParams, NULL, BBFDM_BOTH},
@ -324,7 +325,7 @@ DMLEAF tWiFiEndPointSecurityParams[] = {
/* *** Device.WiFi.EndPoint.{i}.Profile.{i}. *** */
DMOBJ tWiFiEndPointProfileObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Security", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiEndPointProfileSecurityParams, NULL, BBFDM_BOTH},
{0}
};
@ -700,7 +701,7 @@ int get_radio_operating_channel_bandwidth(char *refparam, struct dmctx *ctx, voi
json_object *res;
char *wlan_name;
dmuci_get_value_by_section_string(((struct wifi_radio_args *)data)->wifi_radio_sec, "bandwidth", value);
if (value[0] == '\0')
if ((*value)[0] == '\0')
{
wlan_name = section_name(((struct wifi_radio_args *)data)->wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);

View file

@ -12,10 +12,10 @@
#include <uci.h>
#include <ctype.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_buttons.h"
/*** DMROOT.X_IOPSYS_EU_Buttons.{i}. ****/

View file

@ -11,10 +11,10 @@
#include <uci.h>
#include <ctype.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_dropbear.h"
/*** DMROOT.X_IOPSYS_EU_Dropbear.{i}. ****/

View file

@ -12,10 +12,10 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_ice.h"
/*** DMROOT.X_IOPSYS_EU_ICE. ***/

View file

@ -12,10 +12,10 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_igmp.h"
DMLEAF tSe_IgmpParam[] = {

View file

@ -12,15 +12,15 @@
#include <uci.h>
#include <ctype.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_ipacccfg.h"
/*** DMROOT.X_IOPSYS_EU_IpAccCfg. ***/
DMOBJ tSe_IpAccObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{CUSTOM_PREFIX"IpAccListCfgObj", &DMWRITE, add_ipacccfg_rule, delete_ipacccfg_rule, NULL, browseAccListInst, NULL, NULL, NULL, NULL, tSe_IpAccCfgParam, NULL, BBFDM_BOTH},
{CUSTOM_PREFIX"PortForwarding", &DMWRITE, add_ipacccfg_port_forwarding, delete_ipacccfg_port_forwarding, NULL, browseport_forwardingInst, NULL, NULL, NULL, NULL, tSe_PortForwardingParam, NULL, BBFDM_BOTH},
{0}

View file

@ -10,10 +10,10 @@
*/
#include <uci.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_logincfg.h"
/*** DMROOT.X_IOPSYS_EU_LoginCfg. ***/

View file

@ -12,10 +12,10 @@
#include <uci.h>
#include <ctype.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "dmentry.h"
#include "x_iopsys_eu_owsd.h"
@ -28,7 +28,7 @@ DMLEAF XIopsysEuOwsdParams[] = {
};
DMOBJ XIopsysEuOwsdObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{CUSTOM_PREFIX"UbusProxy", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, UbusProxyParams, NULL, BBFDM_BOTH},
{CUSTOM_PREFIX"ListenObj", &DMWRITE, add_owsd_listen, delete_owsd_listen_instance, NULL, browseXIopsysEuOwsdListenObj, NULL, NULL, NULL, NULL, X_IOPSYS_EU_ListenObjParams, NULL, BBFDM_BOTH},
{0}

View file

@ -12,9 +12,9 @@
*/
#include <unistd.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_power_mgmt.h"
/*** DMROOT.X_IOPSYS_EU_PowerManagement. ***/

View file

@ -12,10 +12,10 @@
#include <uci.h>
#include <stdio.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmubus.h"
#include "dmbbf.h"
#include "dmcommon.h"
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_syslog.h"
/*** DMROOT.X_IOPSYS_EU_SyslogCfg. ***/

View file

@ -10,15 +10,15 @@
#include <uci.h>
#include <ctype.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "x_iopsys_eu_wifilife.h"
/*** DMROOT.X_IOPSYS_EU_WiFiLife. ****/
DMOBJ X_IOPSYS_EU_WiFiLifeObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Steering", &DMREAD, NULL, NULL, NULL, browseWifiLifeSteeringObj, NULL, NULL, NULL, NULL, WiFiLifeSteeringParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -12,15 +12,15 @@
#include <uci.h>
#include <ctype.h>
#include "dmbbf.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include <libbbf_api/dmbbf.h>
#include <libbbf_api/dmuci.h>
#include <libbbf_api/dmubus.h>
#include <libbbf_api/dmcommon.h>
#include "xmpp.h"
/* *** Device.XMPP. *** */
DMOBJ tXMPPObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Connection", &DMWRITE, add_xmpp_connection, delete_xmpp_connection, NULL, browsexmpp_connectionInst, NULL, NULL, NULL, tXMPPConnectionObj, tXMPPConnectionParams, get_xmpp_connection_linker, BBFDM_BOTH},
{0}
};
@ -34,7 +34,7 @@ DMLEAF tXMPPParams[] = {
/* *** Device.XMPP.Connection.{i}. *** */
DMOBJ tXMPPConnectionObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/
{"Server", &DMREAD, NULL, NULL, NULL, browsexmpp_connection_serverInst, NULL, NULL, NULL, NULL, tXMPPConnectionServerParams, NULL, BBFDM_BOTH},
{0}
};

View file

@ -169,7 +169,7 @@ def printheaderObjCommon( objname ):
def cprintheaderOBJS( objname ):
fp = open('./.objparamarray.c', 'a')
print >> fp, "DMOBJ %s[] = {" % ("t" + getname(objname) + "Obj")
print >> fp, "/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/"
print >> fp, "/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type*/"
fp.close()
def hprintheaderOBJS( objname ):

View file

@ -9,6 +9,7 @@
* Author Imen Bhiri <imen.bhiri@pivasoftware.com>
* Author Feten Besbes <feten.besbes@pivasoftware.com>
* Author Omar Kallel <omar.kallel@pivasoftware.com>
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
@ -19,37 +20,8 @@
#include "dmuci.h"
#include "dmbbf.h"
#include "dmmem.h"
#include "device.h"
#include "times.h"
#include "upnp.h"
#include "deviceinfo.h"
#include "managementserver.h"
#include "x_iopsys_eu_igmp.h"
#include "x_iopsys_eu_ice.h"
#include "x_iopsys_eu_power_mgmt.h"
#include "x_iopsys_eu_ipacccfg.h"
#include "x_iopsys_eu_logincfg.h"
#include "x_iopsys_eu_syslog.h"
#include "dmcommon.h"
#include "wifi.h"
#include "ethernet.h"
#include "atm.h"
#include "ptm.h"
#include "bridging.h"
#include "hosts.h"
#include "dhcpv4.h"
#include "ip.h"
#include "ppp.h"
#include "softwaremodules.h"
#include "routing.h"
#include "nat.h"
#include "xmpp.h"
#include "dmjson.h"
#include "dmentry.h"
#include "dmoperate.h"
#ifdef BBF_TR104
#include "voice_services.h"
#endif
static char *get_parameter_notification(struct dmctx *ctx, char *param);
static int remove_parameter_notification(char *param);
@ -340,7 +312,7 @@ void dm_browse_entry(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj,
}
}
if (entryobj->nextobj || entryobj->nextjsonobj) {
if (entryobj->nextobj || entryobj->nextdynamicobj) {
*err = dm_browse(dmctx, &node, entryobj->nextobj, data, instance);
}
}
@ -348,7 +320,8 @@ void dm_browse_entry(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj,
int dm_browse(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, void *data, char *instance)
{
DMOBJ *jentryobj;
int err = 0;
struct dm_dynamic_obj *next_dyn_array;
int i, j, err = 0;
char *parent_obj = parent_node->current_object;
@ -361,11 +334,20 @@ int dm_browse(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, void *d
}
if (parent_node->obj) {
jentryobj = parent_node->obj->nextjsonobj;
for (; (jentryobj && jentryobj->obj); jentryobj++) {
dm_browse_entry(dmctx, parent_node, jentryobj, data, instance, parent_obj, &err);
if (dmctx->stop)
return err;
if (parent_node->obj->nextdynamicobj) {
for (i = 0; i < __INDX_DYNAMIC_MAX; i++) {
next_dyn_array = parent_node->obj->nextdynamicobj + i;
if (next_dyn_array->nextobj) {
for (j = 0; next_dyn_array->nextobj[j]; j++) {
jentryobj = next_dyn_array->nextobj[j];
for (; (jentryobj && jentryobj->obj); jentryobj++) {
dm_browse_entry(dmctx, parent_node, jentryobj, data, instance, parent_obj, &err);
if (dmctx->stop)
return err;
}
}
}
}
}
}
@ -421,6 +403,77 @@ int dm_link_inst_obj(struct dmctx *dmctx, DMNODE *parent_node, void *data, char
return err;
}
static int plugin_dynamic_obj_match(struct dmctx *dmctx, struct dmnode *node, char *entry_obj, char *full_obj)
{
if (node->matched)
return 0;
if (!dmctx->inparam_isparam && strstr(node->current_object, full_obj) == node->current_object) {
node->matched++;
dmctx->findparam = 1;
return 0;
}
if (strstr(full_obj, node->current_object) == full_obj)
return 0;
return FAULT_9005;
}
void dm_check_dynamic_obj(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, char *full_obj, char *obj, DMOBJ **root_entry, int *obj_found)
{
int err = 0;
if (!entryobj)
return;
char *parent_obj = parent_node->current_object;
for (; entryobj->obj; entryobj++) {
DMNODE node = {0};
node.obj = entryobj;
node.parent = parent_node;
node.instance_level = parent_node->instance_level;
node.matched = parent_node->matched;
dmasprintf(&(node.current_object), "%s%s%c", parent_obj, entryobj->obj, dm_delim);
if (strcmp(node.current_object, obj) == 0) {
*root_entry = entryobj;
*obj_found = 1;
return;
}
err = plugin_dynamic_obj_match(dmctx, &node, entryobj->obj, full_obj);
if (err)
continue;
if (entryobj->nextobj)
dm_check_dynamic_obj(dmctx, &node, entryobj->nextobj, full_obj, obj, root_entry, obj_found);
}
}
int free_dm_browse_node_dynamic_object_tree(DMNODE *parent_node, DMOBJ *entryobj)
{
if (!entryobj)
return 0;
for (; entryobj->obj; entryobj++) {
if (entryobj->nextdynamicobj) {
for (int i = 0; i < __INDX_DYNAMIC_MAX; i++) {
struct dm_dynamic_obj *next_dyn_array = entryobj->nextdynamicobj + i;
if (next_dyn_array->nextobj) FREE(next_dyn_array->nextobj);
}
FREE(entryobj->nextdynamicobj);
}
DMNODE node = {0};
node.obj = entryobj;
node.parent = parent_node;
node.instance_level = parent_node->instance_level;
node.matched = parent_node->matched;
if (entryobj->nextobj)
free_dm_browse_node_dynamic_object_tree(&node, entryobj->nextobj);
}
return 0;
}
int rootcmp(char *inparam, char *rootobj)
{
int cmp = -1;
@ -1060,13 +1113,23 @@ int string_to_bool(char *v, bool *b)
return -1;
}
/******************
* operate commands
*****************/
int dm_entry_operate(struct dmctx *dmctx)
void dmentry_instance_lookup_inparam(struct dmctx *ctx)
{
int res = operate_on_node(dmctx, dmctx->in_param, dmctx->in_value);
return res;
char *pch, *spch, *in_param;
in_param = dmstrdup(ctx->in_param);
int i = 0;
char pat[2] = {0};
*pat = dm_delim;
for (pch = strtok_r(in_param, pat, &spch); pch != NULL; pch = strtok_r(NULL, pat, &spch)) {
if (pch[0]== '[') {
ctx->alias_register |= (1 << i);
i++;
} else if (isdigit(pch[0])) {
i++;
}
}
dmfree(in_param);
ctx->nbrof_instance = i;
}
/* **********

View file

@ -8,6 +8,7 @@
* Author MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
* Author Imen Bhiri <imen.bhiri@pivasoftware.com>
* Author Feten Besbes <feten.besbes@pivasoftware.com>
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*
*/
@ -94,6 +95,11 @@ struct dmnode;
struct dmctx;
struct dm_notif_s;
struct dm_dynamic_obj {
struct dm_obj_s **nextobj;
int isstatic;
};
struct dm_permession_s {
char *val;
char *(*get_permission)(char *refparam, struct dmctx *dmctx, void *data, char *instance);
@ -122,7 +128,7 @@ typedef struct dm_leaf_s {
} DMLEAF;
typedef struct dm_obj_s {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type(13)*/
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextdynamicobj, nextobj, leaf, linker, bbfdm_type(13)*/
char *obj;
struct dm_permession_s *permission;
int (*addobj)(char *refparam, struct dmctx *ctx, void *data, char **instance);
@ -131,7 +137,7 @@ typedef struct dm_obj_s {
int (*browseinstobj)(struct dmctx *dmctx, struct dmnode *node, void *data, char *instance);
struct dm_forced_inform_s *forced_inform;
struct dm_notif_s *notification;
struct dm_obj_s *nextjsonobj;
struct dm_dynamic_obj *nextdynamicobj;
struct dm_obj_s *nextobj;
struct dm_leaf_s *leaf;
int (*get_linker)(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker);
@ -274,6 +280,28 @@ typedef struct execute_end_session {
void (*function)(struct execute_end_session *);
} execute_end_session;
typedef struct lib_map_obj {
char *path;
struct dm_obj_s *root_obj;
} LIB_MAP_OBJ;
enum operate_ret_status{
UBUS_INVALID_ARGUMENTS,
SUCCESS,
FAIL,
CMD_NOT_FOUND,
__STATUS_MAX,
};
typedef enum operate_ret_status opr_ret_t;
typedef opr_ret_t (*operation) (struct dmctx *dmctx, char *p, char *input);
typedef struct lib_map_operate {
char *path;
operation operate;
} LIB_MAP_OPERATE;
enum set_value_action {
VALUECHECK,
VALUESET
@ -283,6 +311,7 @@ enum del_action_enum {
DEL_INST,
DEL_ALL
};
enum {
CMD_GET_VALUE,
CMD_GET_NAME,
@ -469,6 +498,12 @@ enum dm_param_flags_enum{
DM_FACTORIZED = 1 << 31
};
enum {
INDX_JSON_OBJ_MOUNT,
INDX_LIBRARY_OBJ_MOUNT,
__INDX_DYNAMIC_MAX
};
extern struct list_head list_enabled_notify;
extern struct list_head list_enabled_lw_notify;
extern struct list_head list_execute_end_session;
@ -505,7 +540,7 @@ void add_list_fault_param(struct dmctx *ctx, char *param, int fault);
void del_list_fault_param(struct param_fault *param_fault);
void free_all_list_fault_param(struct dmctx *ctx);
int string_to_bool(char *v, bool *b);
int dm_entry_operate(struct dmctx *dmctx);
void dmentry_instance_lookup_inparam(struct dmctx *ctx);
int dm_entry_get_value(struct dmctx *ctx);
int dm_entry_get_name(struct dmctx *ctx);
int dm_entry_get_notification(struct dmctx *ctx);
@ -548,6 +583,8 @@ void cwmp_set_end_session (unsigned int flag);
char *dm_print_path(char *fpath, ...);
void free_all_list_enabled_lwnotify();
int dm_link_inst_obj(struct dmctx *dmctx, DMNODE *parent_node, void *data, char *instance);
void dm_check_dynamic_obj(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, char *full_obj, char *obj, DMOBJ **root_entry, int *obj_found);
int free_dm_browse_node_dynamic_object_tree(DMNODE *parent_node, DMOBJ *entryobj);
#ifdef BBF_TR064
void dm_upnp_apply_config(void);
void add_list_upnp_param_track(struct dmctx *dmctx, struct list_head *pchead, char *param, char *key, char *value, unsigned int isobj);

View file

@ -8,6 +8,7 @@
* Author: Imen Bhiri <imen.bhiri@pivasoftware.com>
* Author: Feten Besbes <feten.besbes@pivasoftware.com>
* Author: Omar Kallel <omar.kallel@pivasoftware.com>
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include <arpa/inet.h>
@ -687,7 +688,7 @@ void update_section_list(char *config, char *section, char *option, int number,
struct uci_section *s = NULL;
int i = 0;
if (config == DMMAP)
if (strcmp(config, DMMAP) == 0)
{
if (option) {
uci_path_foreach_option_eq(bbfdm, config, section, option, filter, s) {

View file

@ -7,15 +7,18 @@
*
* Author: Imen Bhiri <imen.bhiri@pivasoftware.com>
* Author: Feten Besbes <feten.besbes@pivasoftware.com>
* Author Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#ifndef __DM_COMMON_H
#define __DM_COMMON_H
#include <sys/types.h>
#include <libubox/blobmsg_json.h>
#include <json-c/json.h>
#include <unistd.h>
#include "dmbbf.h"
#define NVRAM_FILE "/proc/nvram/WpaKey"
#define MAX_DHCP_LEASES 256
#define MAX_PROC_ROUTING 256

53
library/example.json Normal file
View file

@ -0,0 +1,53 @@
{
"Device.IP.Diagnostics.X_IOPSYS_EU_BBKSpeedTest.": {
"type": "object",
"protocols": [
"cwmp",
"usp"
],
"access": false,
"DiagnosticsState": {
"type": "string",
"protocols": [
"cwmp",
"usp"
],
"read": true,
"write": true
},
"Latency": {
"type": "string",
"protocols": [
"cwmp",
"usp"
],
"read": true,
"write": false
},
"Download": {
"type": "string",
"protocols": [
"cwmp",
"usp"
],
"read": true,
"write": false
},
"Upload": {
"type": "string",
"protocols": [
"cwmp",
"usp"
],
"read": true,
"write": false
}
},
"Device.BBKSpeedTest": {
"type": "operate"
}
}

23
library/example/Makefile Normal file
View file

@ -0,0 +1,23 @@
LIB_EXAMPLE := lib/libexample.so
OBJS := example.o
PROG_CFLAGS = $(CFLAGS) -fstrict-aliasing
PROG_LDFLAGS = $(LDFLAGS) -lbbfdm
FPIC := -fPIC
.PHONY: all
%.o: %.c
$(CC) $(PROG_CFLAGS) $(FPIC) -c -o $@ $<
all: $(LIB_EXAMPLE)
$(LIB_EXAMPLE): $(OBJS)
$(shell mkdir -p lib)
$(CC) -shared -Wl,-soname,libexample.so $^ -o $@
clean:
rm -f *.o
rm -f $(LIB_EXAMPLE)

151
library/example/example.c Normal file
View file

@ -0,0 +1,151 @@
/*
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#include <libbbfdm/dmbbf.h>
#include <libbbfdm/dmcommon.h>
#include <libbbfdm/dmuci.h>
#include <libbbfdm/dmubus.h>
#include <libbbfdm/dmjson.h>
#include <libbbfdm/dmentry.h>
#include <libbbfdm/dmoperate.h>
#include "example.h"
/* ********** RootDynamicObj ********** */
LIB_MAP_OBJ tRootDynamicObj[] = {
/* parentobj, nextobject */
{"Device.IP.Diagnostics.", tdynamicIPDiagnosticsObj},
{0}
};
/* ********** RootDynamicOperate ********** */
LIB_MAP_OPERATE tRootDynamicOperate[] = {
/* pathname, operation */
{"Device.BBKSpeedTest", dynamicDeviceOperate},
{0}
};
/* *** Device.IP.Diagnostics. *** */
DMOBJ tdynamicIPDiagnosticsObj[] = {
/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/
{"X_IOPSYS_EU_BBKSpeedTest", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tdynamicIPDiagnosticsX_IOPSYS_EU_BBKSpeedTestParams, NULL, BBFDM_BOTH},
{0}
};
/* *** Device.IP.Diagnostics.X_IOPSYS_EU_BBKSpeedTest. *** */
DMLEAF tdynamicIPDiagnosticsX_IOPSYS_EU_BBKSpeedTestParams[] = {
/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/
{"DiagnosticsState", &DMWRITE, DMT_STRING, getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_DiagnosticsState, setdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_DiagnosticsState, NULL, NULL, BBFDM_BOTH},
{"Latency", &DMREAD, DMT_STRING, getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Latency, NULL, NULL, NULL, BBFDM_BOTH},
{"Download", &DMREAD, DMT_STRING, getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Download, NULL, NULL, NULL, BBFDM_BOTH},
{"Upload", &DMREAD, DMT_STRING, getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Upload, NULL, NULL, NULL, BBFDM_BOTH},
{0}
};
/*************************************************************
* GET & SET PARAM
/*************************************************************/
static int execute_bbk_speedtest()
{
json_object *res;
char *latency, *download, *upload = NULL;
dmubus_call("bbk", "start", UBUS_ARGS{}, 0, &res);
if (res) {
dmuci_set_varstate_value("cwmp", "@bbkspeedtest[0]", "DiagnosticState", "Complete");
latency=dmjson_get_value(res, 1, "latency");
if(latency!=NULL && strlen(latency)>0)
dmuci_set_varstate_value("cwmp", "@bbkspeedtest[0]", "Latency", latency);
download=dmjson_get_value(res, 1, "download");
if(download!=NULL && strlen(latency)>0)
dmuci_set_varstate_value("cwmp", "@bbkspeedtest[0]", "Download", download);
upload=dmjson_get_value(res, 1, "upload");
if(upload!=NULL && strlen(upload)>0)
dmuci_set_varstate_value("cwmp", "@bbkspeedtest[0]", "Upload", upload);
}
return 0;
}
static inline char *bbk_speedtest_get(char *option, char *def)
{
char *tmp;
dmuci_get_varstate_string("cwmp", "@bbkspeedtest[0]", option, &tmp);
if(tmp && tmp[0] == '\0')
return dmstrdup(def);
else
return tmp;
}
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_DiagnosticsState(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
*value = bbk_speedtest_get("DiagnosticState", "None");
return 0;
}
int setdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_DiagnosticsState(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
{
char *tmp;
struct uci_section *curr_section = NULL;
switch (action) {
case VALUECHECK:
break;
case VALUESET:
if (strcmp(value, "Requested") == 0) {
curr_section = dmuci_walk_state_section("cwmp", "bbkspeedtest", NULL, NULL, CMP_SECTION, NULL, NULL, GET_FIRST_SECTION);
if(!curr_section)
{
dmuci_add_state_section("cwmp", "bbkspeedtest", &curr_section, &tmp);
}
dmuci_set_varstate_value("cwmp", "@bbkspeedtest[0]", "DiagnosticState", value);
execute_bbk_speedtest();
}
break;
}
return 0;
}
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Latency(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
*value = bbk_speedtest_get("Latency", "0");
return 0;
}
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Download(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
*value = bbk_speedtest_get("Download", "0");
return 0;
}
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Upload(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
*value = bbk_speedtest_get("Upload", "0");
return 0;
}
/*************************************************************
* OPERATE
/*************************************************************/
opr_ret_t dynamicDeviceOperate(struct dmctx *dmctx, char *path, char *input)
{
json_object *ubus_res = NULL;
dmubus_call("bbk", "start", UBUS_ARGS{}, 0, &ubus_res);
char *param_latency = (char *) dmjson_get_value(ubus_res, 1, "latency");
char *param_download = (char *) dmjson_get_value(ubus_res, 1, "download");
char *param_upload = (char *) dmjson_get_value(ubus_res, 1, "upload");
add_list_paramameter(dmctx, dmstrdup("Latency"), param_latency, "string", NULL, 0);
add_list_paramameter(dmctx, dmstrdup("Download"), param_download, "string", NULL, 0);
add_list_paramameter(dmctx, dmstrdup("Upload"), param_upload, "string", NULL, 0);
return SUCCESS;
}

25
library/example/example.h Normal file
View file

@ -0,0 +1,25 @@
/*
* Copyright (C) 2020 iopsys Software Solutions AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation
*
* Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
*/
#ifndef __EXAMPLE_H
#define __EXAMPLE_H
DMOBJ tdynamicIPDiagnosticsObj[];
DMLEAF tdynamicIPDiagnosticsX_IOPSYS_EU_BBKSpeedTestParams[];
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_DiagnosticsState(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
int setdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_DiagnosticsState(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Latency(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Download(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
int getdynamic_IPDiagnosticsX_IOPSYS_EU_BBKSpeedTest_Upload(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);
opr_ret_t dynamicDeviceOperate(struct dmctx *dmctx, char *path, char *input);
#endif //__EXAMPLE_H

641
library/generate_library.py Executable file
View file

@ -0,0 +1,641 @@
#!/usr/bin/python
# Copyright (C) 2020 iopsys Software Solutions AB
# Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>
import os
import sys
import time
import json
from collections import OrderedDict
arrtype = {
"string": "DMT_STRING",
"unsignedInt": "DMT_UNINT",
"unsignedLong": "DMT_UNLONG",
"int": "DMT_INT",
"long": "DMT_LONG",
"boolean": "DMT_BOOL",
"dateTime": "DMT_TIME",
"hexBinary": "DMT_HEXBIN",
"base64": "DMT_BASE64",
}
def removefile( filename ):
try:
os.remove(filename)
except OSError:
pass
def securemkdir( folder ):
try:
os.mkdir(folder)
except:
pass
def getlastname( name ):
lastname = name
lastname = lastname.replace(".{i}", "")
namelist = lastname.split('.')
lastname = namelist[-1]
if lastname == "":
lastname = namelist[-2]
return lastname;
def getname( objname ):
OBJSname = objname
if (objname.count('.') > 1 and (objname.count('.') != 2 or objname.count('{i}') != 1)):
OBJSname = objname.replace("Device", "", 1)
OBJSname = OBJSname.replace("{i}", "")
OBJSname = OBJSname.replace(".", "")
if (objname.count('.') == 1):
OBJSname = "Device"
return OBJSname
return OBJSname;
def getoptionparam( value, option ):
val = "false"
if isinstance(value,dict):
for k,v in value.items():
if k == option:
return v
return val
def getprotocolsparam( value, option ):
if isinstance(value,dict):
for k,v in value.items():
if k == option and isinstance(v, list):
if len(v) == 2:
return "BBFDM_BOTH"
elif v[0] == "usp":
return "BBFDM_USP"
else:
return "BBFDM_CWMP"
return "BBFDM_BOTH"
def getparamtype( value ):
ptype = None
paramtype = getoptionparam(value, "type")
ptype = arrtype.get(paramtype, None)
if ptype == None:
ptype = "__NA__"
return ptype
def objhaschild( value ):
if isinstance(value,dict):
for k,v in value.items():
if isinstance(v,dict):
for k1,v1 in v.items():
if k1 == "type" and v1 == "object":
return 1
return 0
def objhasparam( value ):
if isinstance(value,dict):
for k,v in value.items():
if isinstance(v,dict):
for k1,v1 in v.items():
if k1 == "type" and v1 != "object":
return 1
return 0
def printheaderObjCommon( objname ):
fp = open('./.objparamarray.c', 'a')
print >> fp, "/* *** %s *** */" % objname
fp.close()
def cprintheaderOBJS( objname ):
fp = open('./.objparamarray.c', 'a')
print >> fp, "DMOBJ %s[] = {" % ("tdynamic" + getname(objname) + "Obj")
print >> fp, "/* OBJ, permission, addobj, delobj, checkobj, browseinstobj, forced_inform, notification, nextjsonobj, nextobj, leaf, linker, bbfdm_type*/"
fp.close()
def cprintheaderRootDynamicObj( ):
fp = open('./.objroot.c', 'a')
print >> fp, "/* ********** RootDynamicObj ********** */"
print >> fp, "LIB_MAP_OBJ tRootDynamicObj[] = {"
print >> fp, "/* parentobj, nextobject */"
fp.close()
def cprintheaderRootDynamicOperate( ):
fp = open('./.objroot.c', 'a')
print >> fp, "/* ********** RootDynamicOperate ********** */"
print >> fp, "LIB_MAP_OPERATE tRootDynamicOperate[] = {"
print >> fp, "/* pathname, operation */"
fp.close()
def printObjRootDynamic( dmobject ):
commonname = getname(dmobject)
fp = open('./.objroot.c', 'a')
print >> fp, "{\"%s\", %s}," % (dmobject, "tdynamic" + commonname + "Obj")
fp.close()
def printOperateRootDynamic( dmobject, commonname ):
fp = open('./.objroot.c', 'a')
print >> fp, "{\"%s\", %s}," % (dmobject, "dynamic" + commonname + "Operate")
fp.close()
def printtailArrayRootDynamic( ):
fp = open('./.objroot.c', 'a')
print >> fp, "{0}"
print >> fp, "};"
print >> fp, ""
fp.close()
def hprintheaderOBJS( objname ):
fp = open('./.objparamarray.h', 'a')
print >> fp, "DMOBJ %s[];" % ("tdynamic" + getname(objname) + "Obj")
fp.close()
def cprinttopfile ( fp ):
print >> fp, "/*"
print >> fp, " * Copyright (C) 2020 iopsys Software Solutions AB"
print >> fp, " *"
print >> fp, " * This program is free software; you can redistribute it and/or modify"
print >> fp, " * it under the terms of the GNU Lesser General Public License version 2.1"
print >> fp, " * as published by the Free Software Foundation"
print >> fp, " *"
print >> fp, " * Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>"
print >> fp, " */"
print >> fp, ""
print >> fp, "#include <libbbfdm/dmbbf.h>"
print >> fp, "#include <libbbfdm/dmcommon.h>"
print >> fp, "#include <libbbfdm/dmuci.h>"
print >> fp, "#include <libbbfdm/dmubus.h>"
print >> fp, "#include <libbbfdm/dmjson.h>"
print >> fp, "#include <libbbfdm/dmentry.h>"
print >> fp, "#include <libbbfdm/dmoperate.h>"
print >> fp, "#include \"example.h\""
print >> fp, ""
def hprinttopfile ( fp ):
print >> fp, "/*"
print >> fp, " * Copyright (C) 2020 iopsys Software Solutions AB"
print >> fp, " *"
print >> fp, " * This program is free software; you can redistribute it and/or modify"
print >> fp, " * it under the terms of the GNU Lesser General Public License version 2.1"
print >> fp, " * as published by the Free Software Foundation"
print >> fp, " *"
print >> fp, " * Author: Amin Ben Ramdhane <amin.benramdhane@pivasoftware.com>"
print >> fp, " */"
print >> fp, ""
print >> fp, "#ifndef __EXAMPLE_H"
print >> fp, "#define __EXAMPLE_H"
print >> fp, ""
def printmakefile ( fp ):
print >> fp, "LIB_EXAMPLE := lib/libexample.so"
print >> fp, ""
print >> fp, "OBJS := example.o"
print >> fp, ""
print >> fp, "PROG_CFLAGS = $(CFLAGS) -fstrict-aliasing"
print >> fp, "PROG_LDFLAGS = $(LDFLAGS) -lbbfdm"
print >> fp, "FPIC := -fPIC"
print >> fp, ""
print >> fp, ".PHONY: all"
print >> fp, ""
print >> fp, "%.o: %.c"
print >> fp, " $(CC) $(PROG_CFLAGS) $(FPIC) -c -o $@ $<"
print >> fp, ""
print >> fp, "all: $(LIB_EXAMPLE)"
print >> fp, ""
print >> fp, "$(LIB_EXAMPLE): $(OBJS)"
print >> fp, " $(shell mkdir -p lib)"
print >> fp, " $(CC) -shared -Wl,-soname,libexample.so $^ -o $@"
print >> fp, ""
print >> fp, "clean:"
print >> fp, " rm -f *.o"
print >> fp, " rm -f $(LIB_EXAMPLE)"
print >> fp, ""
def hprintfootfile ( fp ):
print >> fp, ""
print >> fp, "#endif //__EXAMPLE_H"
print >> fp, ""
def cprintAddDelObj( faddobj, fdelobj, name, mappingobj, dmobject ):
fp = open('./.objadddel.c', 'a')
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char **instance)" % faddobj
print >> fp, "{"
print >> fp, " //TODO"
print >> fp, " return 0;"
print >> fp, "}"
print >> fp, ""
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action)" % fdelobj
print >> fp, "{"
print >> fp, " switch (del_action) {"
print >> fp, " case DEL_INST:"
print >> fp, " //TODO"
print >> fp, " break;"
print >> fp, " case DEL_ALL:"
print >> fp, " //TODO"
print >> fp, " break;"
print >> fp, " }"
print >> fp, " return 0;"
print >> fp, "}"
print >> fp, ""
fp.close()
def hprintAddDelObj( faddobj, fdelobj ):
fp = open('./.objadddel.h', 'a')
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char **instance);" % faddobj
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char *instance, unsigned char del_action);" % fdelobj
fp.close()
def cprintBrowseObj( fbrowse, name, mappingobj, dmobject ):
fp = open('./.objbrowse.c', 'a')
print >> fp, "int %s(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)" % fbrowse
print >> fp, "{"
print >> fp, " //TODO"
print >> fp, " return 0;"
print >> fp, "}"
print >> fp, ""
fp.close()
def hprintBrowseObj( fbrowse ):
fp = open('./.objbrowse.h', 'a')
print >> fp, "int %s(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance);" % fbrowse
fp.close()
def cprintGetSetValue(getvalue, setvalue, mappingparam, instance, typeparam, parentname, dmparam):
fp = open('./.getstevalue.c', 'a')
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)" % getvalue
print >> fp, "{"
print >> fp, " //TODO"
print >> fp, " return 0;"
print >> fp, "}"
print >> fp, ""
if setvalue != "NULL":
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)" % setvalue
print >> fp, "{"
print >> fp, " switch (action) {"
print >> fp, " case VALUECHECK:"
print >> fp, " break;"
print >> fp, " case VALUESET:"
print >> fp, " //TODO"
print >> fp, " break;"
print >> fp, " }"
print >> fp, " return 0;"
print >> fp, "}"
print >> fp, ""
fp.close()
def hprintGetSetValue( getvalue, setvalue ):
fp = open('./.getstevalue.h', 'a')
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value);" % getvalue
if setvalue != "NULL":
print >> fp, "int %s(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);" % setvalue
fp.close()
def cprintOperate( get_operate ):
fp = open('./.operate.c', 'a')
print >> fp, "opr_ret_t %s(struct dmctx *dmctx, char *path, char *input)" % ("dynamic" + get_operate + "Operate")
print >> fp, "{"
print >> fp, " return SUCCESS;"
print >> fp, "}"
fp.close()
def cprintheaderPARAMS( objname ):
fp = open('./.objparamarray.c', 'a')
print >> fp, "DMLEAF %s[] = {" % ("tdynamic" + getname(objname) + "Params")
print >> fp, "/* PARAM, permission, type, getvalue, setvalue, forced_inform, notification, bbfdm_type*/"
fp.close()
def hprintOperate( get_operate ):
fp = open('./.operate.h', 'a')
print >> fp, "opr_ret_t %s(struct dmctx *dmctx, char *path, char *input);" % ("dynamic" + get_operate + "Operate")
fp.close()
def hprintheaderPARAMS( objname ):
fp = open('./.objparamarray.h', 'a')
print >> fp, "DMLEAF %s[];" % ("tdynamic" + getname(objname) + "Params")
fp.close()
def printPARAMline( parentname, dmparam, value ):
commonname = getname(parentname) + "_" + dmparam
ptype = getparamtype(value)
getvalue = "getdynamic_" + commonname
mappingparam = getoptionparam(value, "mapping")
typeparam = getoptionparam(value, "type")
bbfdm = getprotocolsparam(value, "protocols")
accessparam = getoptionparam(value, "write")
if accessparam:
access = "&DMWRITE"
setvalue = "setdynamic_" + commonname
else:
access = "&DMREAD"
setvalue = "NULL"
if parentname.endswith(".{i}."):
instance = "TRUE"
else:
instance = "FALSE"
cprintGetSetValue(getvalue, setvalue, mappingparam, instance, typeparam, parentname, dmparam)
hprintGetSetValue(getvalue, setvalue)
fp = open('./.objparamarray.c', 'a')
print >> fp, "{\"%s\", %s, %s, %s, %s, NULL, NULL, %s}," % (dmparam, access, ptype, getvalue, setvalue, bbfdm)
fp.close()
def printtailArray( ):
fp = open('./.objparamarray.c', 'a')
print >> fp, "{0}"
print >> fp, "};"
print >> fp, ""
fp.close()
def printOBJline( dmobject, value ):
commonname = getname(dmobject)
hasobj = objhaschild(value)
hasparam = objhasparam(value)
accessobj = getoptionparam(value, "access")
mappingobj = getoptionparam(value, "mapping")
bbfdm = getprotocolsparam(value, "protocols")
if accessobj:
access = "&DMWRITE"
faddobj = "adddynamicObj" + commonname
fdelobj = "deldynamicObj" + commonname
cprintAddDelObj(faddobj, fdelobj, (getlastname(dmobject)).lower(), mappingobj, dmobject)
hprintAddDelObj(faddobj, fdelobj)
else:
access = "&DMREAD"
faddobj = "NULL"
fdelobj = "NULL"
if dmobject.endswith(".{i}."):
fbrowse = "browse" + commonname + "Inst"
cprintBrowseObj(fbrowse, (getlastname(dmobject)).lower(), mappingobj, dmobject)
hprintBrowseObj(fbrowse)
else:
fbrowse = "NULL"
if hasobj:
objchildarray = "tdynamic" + commonname + "Obj"
else:
objchildarray = "NULL"
if hasparam:
paramarray = "tdynamic" + commonname + "Params"
else:
paramarray = "NULL"
fp = open('./.objparamarray.c', 'a')
print >> fp, "{\"%s\", %s, %s, %s, NULL, %s, NULL, NULL, NULL, %s, %s, NULL, %s}," % (getlastname(dmobject), access, faddobj, fdelobj, fbrowse, objchildarray, paramarray, bbfdm)
fp.close()
def printusage():
print "Usage: " + sys.argv[0] + " <json file>"
print "Examples:"
print " - " + sys.argv[0] + " example.json"
print " ==> Generate the C code in example/ folder"
def object_parse_childs( dmobject , value, nextlevel ):
hasobj = objhaschild(value)
hasparam = objhasparam(value)
if hasobj or hasparam:
printheaderObjCommon(dmobject)
if hasobj:
cprintheaderOBJS(dmobject)
hprintheaderOBJS(dmobject)
if isinstance(value,dict):
for k,v in value.items():
if isinstance(v,dict):
for k1,v1 in v.items():
if k1 == "type" and v1 == "object":
printOBJline(k, v)
break
printtailArray()
if hasparam:
cprintheaderPARAMS(dmobject)
hprintheaderPARAMS(dmobject)
if isinstance(value,dict):
for k,v in value.items():
if k == "mapping":
continue
if isinstance(v,dict):
for k1,v1 in v.items():
if k1 == "type" and v1 != "object":
printPARAMline(dmobject, k, v)
break
printtailArray()
if hasobj and nextlevel == 0:
if isinstance(value,dict):
for k,v in value.items():
if isinstance(v,dict):
for k1,v1 in v.items():
if k1 == "type" and v1 == "object":
object_parse_childs(k , v, 0)
def generatecfiles( pdir ):
securemkdir(pdir)
dmfpc = open(pdir + "/example" + ".c", "w")
dmfph = open(pdir + "/example" + ".h", "w")
makefile = open(pdir + "/Makefile", "w")
cprinttopfile(dmfpc)
hprinttopfile(dmfph)
printmakefile(makefile)
try:
tmpf = open("./.objroot.c", "r")
tmpd = tmpf.read()
tmpf.close()
dmfpc.write(tmpd)
except:
pass
try:
tmpf = open("./.objparamarray.c", "r")
tmpd = tmpf.read()
tmpf.close()
dmfpc.write(tmpd)
except:
pass
try:
tmpf = open("./.objparamarray.h", "r")
tmpd = tmpf.read()
tmpf.close()
dmfph.write(tmpd)
print >> dmfph, ""
except:
pass
try:
exists = os.path.isfile("./.objbrowse.c")
if exists:
print >> dmfpc, "/*************************************************************"
print >> dmfpc, " * ENTRY METHOD"
print >> dmfpc, "/*************************************************************/"
tmpf = open("./.objbrowse.c", "r")
tmpd = tmpf.read()
tmpf.close()
dmfpc.write(tmpd)
except:
pass
try:
tmpf = open("./.objbrowse.h", "r")
tmpd = tmpf.read()
tmpf.close()
dmfph.write(tmpd)
print >> dmfph, ""
except:
pass
try:
exists = os.path.isfile("./.objadddel.c")
if exists:
print >> dmfpc, "/*************************************************************"
print >> dmfpc, " * ADD & DEL OBJ"
print >> dmfpc, "/*************************************************************/"
tmpf = open("./.objadddel.c", "r")
tmpd = tmpf.read()
tmpf.close()
dmfpc.write(tmpd)
except:
pass
try:
tmpf = open("./.objadddel.h", "r")
tmpd = tmpf.read()
tmpf.close()
dmfph.write(tmpd)
print >> dmfph, ""
except:
pass
try:
exists = os.path.isfile("./.getstevalue.c")
if exists:
print >> dmfpc, "/*************************************************************"
print >> dmfpc, " * GET & SET PARAM"
print >> dmfpc, "/*************************************************************/"
tmpf = open("./.getstevalue.c", "r")
tmpd = tmpf.read()
tmpf.close()
dmfpc.write(tmpd)
except:
pass
try:
tmpf = open("./.getstevalue.h", "r")
tmpd = tmpf.read()
tmpf.close()
dmfph.write(tmpd)
except:
pass
try:
exists = os.path.isfile("./.operate.c")
if exists:
print >> dmfpc, "/*************************************************************"
print >> dmfpc, " * OPERATE"
print >> dmfpc, "/*************************************************************/"
tmpf = open("./.operate.c", "r")
tmpd = tmpf.read()
tmpf.close()
dmfpc.write(tmpd)
except:
pass
try:
tmpf = open("./.operate.h", "r")
tmpd = tmpf.read()
tmpf.close()
dmfph.write(tmpd)
except:
pass
hprintfootfile(dmfph)
removetmpfiles()
def generatestartedobject( key , value ):
obj_type = getoptionparam(value, "type")
if obj_type == "operate":
key = key.replace(".{i}.", ".*.")
if key not in ListOperate:
ListOperate.append(key)
else:
key = key.replace(".{i}", "")
obj = '.'.join(key.split(".")[0:key.count('.')-1]) + '.'
if obj not in ListObjects:
ListObjects.append(obj)
def generateRootDynamicarray( ):
cprintheaderRootDynamicObj()
for x in ListObjects:
printObjRootDynamic(x)
printtailArrayRootDynamic()
cprintheaderRootDynamicOperate()
for x in ListOperate:
commonname = getname(x)
printOperateRootDynamic(x, commonname)
cprintOperate(commonname)
hprintOperate(commonname)
printtailArrayRootDynamic()
def removetmpfiles( ):
removefile("./.objparamarray.c")
removefile("./.objparamarray.h")
removefile("./.objadddel.c")
removefile("./.objadddel.h")
removefile("./.objbrowse.c")
removefile("./.objbrowse.h")
removefile("./.getstevalue.c")
removefile("./.getstevalue.h")
removefile("./.operate.c")
removefile("./.operate.h")
removefile("./.objroot.c")
### main ###
if len(sys.argv) < 2:
printusage()
exit(1)
if (sys.argv[1]).lower() == "-h" or (sys.argv[1]).lower() == "--help":
printusage()
exit(1)
json_file = sys.argv[1]
gendir = "example"
removetmpfiles()
with open(json_file) as file:
data = json.loads(file.read(), object_pairs_hook=OrderedDict)
ListObjects = []
ListOperate = []
for i,(key,value) in enumerate(data.items()):
generatestartedobject(key, value)
generateRootDynamicarray()
for x in ListObjects:
printheaderObjCommon(x)
cprintheaderOBJS(x)
hprintheaderOBJS(x)
for i,(key,value) in enumerate(data.items()):
obj_type = getoptionparam(value, "type")
if obj_type == "operate":
continue
objstart = key
key = key.replace(".{i}", "")
obj = '.'.join(key.split(".")[0:key.count('.')-1]) + '.'
if x == obj:
printOBJline(objstart, value)
printtailArray()
for i,(key,value) in enumerate(data.items()):
objstart = key
device = key.split(".")
if device[0] == None:
print "Wrong JSON Data model format!"
exit(1)
object_parse_childs(objstart, value, 0)
generatecfiles(gendir)
if (os.path.isdir(gendir)):
print "Source code generated under \"./%s\" folder" % gendir
else:
print "No source code generated!"

BIN
pictures/rootdynamicobj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB