mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2026-03-09 02:37:23 +01:00
Update of questd to support igmp
This commit is contained in:
parent
59446a8607
commit
39a7f99571
2 changed files with 46 additions and 22 deletions
|
|
@ -8,7 +8,6 @@
|
|||
#include "questd.h"
|
||||
#include "igmp.h"
|
||||
|
||||
|
||||
static void tokenize_line(char *str, const char **tokens, size_t tokens_size) {
|
||||
char *ptr = str;
|
||||
const char **token = tokens; // = line;
|
||||
|
|
@ -27,7 +26,7 @@ static void tokenize_line(char *str, const char **tokens, size_t tokens_size) {
|
|||
continue;
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int igmp_rpc(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
|
|
@ -39,10 +38,10 @@ int igmp_rpc(struct ubus_context *ctx, struct ubus_object *obj,
|
|||
char line[256];
|
||||
IGMPtable table[128];
|
||||
const char *tokens[32] = { 0 };
|
||||
void *object, *array;
|
||||
void *object, *array,*t;
|
||||
|
||||
blob_buf_init(&bb, 0);
|
||||
if (!(in = fopen("/proc/net/igmp_snooping", "r")))
|
||||
if (!(in = fopen("/tmp/igmp_snooping", "r")))
|
||||
return 1;
|
||||
array = blobmsg_open_array(&bb, "tables");
|
||||
|
||||
|
|
@ -60,80 +59,91 @@ int igmp_rpc(struct ubus_context *ctx, struct ubus_object *obj,
|
|||
tokenize_line(line, tokens, sizeof(tokens) / sizeof(char*));
|
||||
int tok_pos = 0;
|
||||
const char **token = tokens;
|
||||
//const char *names[] = { "bridge", "dev", "srcdev", "tags", "lantci",
|
||||
// "wantci", "group", "mode", "rxgroup", "source", "reporter",
|
||||
// "timeout", "index", "excludept" };
|
||||
const char *names[] = { "bridge", "dev", "srcdev", "tags", "lantci",
|
||||
"wantci", "group", "mode", "rxgroup", "source", "reporter",
|
||||
"timeout", "index", "excludept" };
|
||||
|
||||
while (*token) {
|
||||
printf("<%d>\n",tok_pos);
|
||||
switch (tok_pos) {
|
||||
case 0:
|
||||
|
||||
sprintf(table[row-2].bridge,"%s",*token);
|
||||
printf("%s\n%s\n",table[row-2].bridge,*token);
|
||||
snprintf(table[row-2].bridge,"%s",token);
|
||||
printf("%s\n%s\n",table[row-2].bridge,token);
|
||||
break;
|
||||
case 1:
|
||||
sprintf(table[row-2].device,"%s",*token);
|
||||
snprintf(table[row-2].device,"%s",token);
|
||||
break;
|
||||
case 2:
|
||||
sprintf(table[row - 2].tags ,"%s",*token);
|
||||
snprintf(table[row - 2].tags ,"%s",token);
|
||||
break;
|
||||
case 3: {
|
||||
uint32_t ip;
|
||||
sscanf(*token, "%8x", &ip);
|
||||
char str[17];
|
||||
|
||||
sscanf(token, "%8x", &ip);
|
||||
sprintf(table[row - 2].lantci, "%d.%d.%d.%d", (ip >> 16),
|
||||
(ip >> 8) & 0xff, ip & 0xff, (ip >> 24) & 0xff);
|
||||
}
|
||||
break;
|
||||
case 4: {
|
||||
uint32_t ip;
|
||||
sscanf(*token, "%8x", &ip);
|
||||
char str[17];
|
||||
|
||||
sscanf(token, "%8x", &ip);
|
||||
sprintf(table[row - 2].wantci, "%d.%d.%d.%d", (ip >> 16),
|
||||
(ip >> 8) & 0xff, ip & 0xff, (ip >> 24) & 0xff);
|
||||
}
|
||||
break;
|
||||
case 5: {
|
||||
uint32_t ip;
|
||||
sscanf(*token, "%8x", &ip);
|
||||
char str[17];
|
||||
|
||||
sscanf(token, "%8x", &ip);
|
||||
sprintf(table[row - 2].group, "%d.%d.%d.%d", (ip >> 16),
|
||||
(ip >> 8) & 0xff, ip & 0xff, (ip >> 24) & 0xff);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
sprintf(table[row - 2].mode,"%s",*token);
|
||||
snprintf(table[row - 2].mode,"%s",token);
|
||||
break;
|
||||
case 7: {
|
||||
uint32_t ip;
|
||||
char str[17];
|
||||
|
||||
sscanf(*token, "%8x", &ip);
|
||||
sscanf(token, "%8x", &ip);
|
||||
sprintf(table[row - 2].RxGroup, "%d.%d.%d.%d", (ip >> 16),
|
||||
(ip >> 8) & 0xff, ip & 0xff, (ip >> 24) & 0xff);
|
||||
}
|
||||
break;
|
||||
case 8: {
|
||||
uint32_t ip;
|
||||
sscanf(*token, "%8x", &ip);
|
||||
char str[17];
|
||||
|
||||
sscanf(token, "%8x", &ip);
|
||||
sprintf(table[row - 2].source, "%d.%d.%d.%d", (ip >> 16),
|
||||
(ip >> 8) & 0xff, ip & 0xff, (ip >> 24) & 0xff);
|
||||
}
|
||||
break;
|
||||
case 9: {
|
||||
uint32_t ip;
|
||||
sscanf(*token, "%8x", &ip);
|
||||
char str[17];
|
||||
|
||||
sscanf(token, "%8x", &ip);
|
||||
sprintf(table[row - 2].reporter, "%d.%d.%d.%d", (ip >> 16),
|
||||
(ip >> 8) & 0xff, ip & 0xff, (ip >> 24) & 0xff);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
sprintf(table[row - 2].timeout,"%s",*token);
|
||||
snprintf(table[row - 2].timeout,"%s",token);
|
||||
|
||||
break;
|
||||
case 11:
|
||||
sprintf(table[row - 2].Index,"%s",*token);
|
||||
snprintf(table[row - 2].Index,"%s",token);
|
||||
|
||||
break;
|
||||
case 12:
|
||||
sprintf(table[row - 2].ExcludPt,"%s",*token);
|
||||
snprintf(table[row - 2].ExcludPt,"%s",token);
|
||||
|
||||
break;
|
||||
default:
|
||||
|
|
@ -172,4 +182,3 @@ int igmp_rpc(struct ubus_context *ctx, struct ubus_object *obj,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1313,6 +1313,21 @@ quest_router_igmp_table(struct ubus_context *ctx, struct ubus_object *obj,
|
|||
return 0;
|
||||
}*/
|
||||
|
||||
static int
|
||||
quest_router_igmp_table(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct ubus_request_data *req, const char *method,
|
||||
struct blob_attr *msg)
|
||||
{
|
||||
struct blob_attr *tb[__QUEST_MAX];
|
||||
|
||||
blobmsg_parse(quest_policy, __QUEST_MAX, tb, blob_data(msg), blob_len(msg));
|
||||
|
||||
blob_buf_init(&bb, 0);
|
||||
router_dump_connected_clients6(&bb);
|
||||
ubus_send_reply(ctx, req, bb.head);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int
|
||||
quest_router_clients6(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct ubus_request_data *req, const char *method,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue