никак, не предусмотренов качестве Calling-Station-Id передавался ИП адрес абонента?
ип адрес передаются в имени пользователя, зачем ещё в Calling-Station-Id дублировать
никак, не предусмотренов качестве Calling-Station-Id передавался ИП адрес абонента?
Когда делал тест новой версии, даже при чистом запуске тоже наблюдал подобную картину.
Code: Select all
static void parse_local_net(const char *opt)
{
const char *ptr;
char str[17];
in_addr_t addr;
int mask;
char *endptr;
ptr = strchr(opt, '/');
if (ptr) {
memcpy(str, opt, ptr - opt);
str[ptr - opt] = 0;
addr = inet_addr(str);
if (addr == INADDR_NONE)
goto out_err;
mask = strtoul(ptr + 1, &endptr, 10);
if (mask > 32)
goto out_err;
} else {
addr = inet_addr(opt);
if (addr == INADDR_NONE)
goto out_err;
mask = 24;
}
if (mask == 32)
mask = 0xffffffff;
else
mask = (1 << (32-mask)) - 1;
addr = ntohl(addr);
mask = ~mask;
//printf("%x/%x %x\n", htonl(addr), ~mask, htonl(addr)&(~mask));
ipoe_nl_add_net(addr & mask, mask);
return;
out_err:
log_error("ipoe: failed to parse 'local-net=%s'\n", opt);
}
static void load_local_nets(struct conf_sect_t *sect)
{
struct conf_option_t *opt;
ipoe_nl_delete_nets();
list_for_each_entry(opt, §->items, entry) {
if (strcmp(opt->name, "local-net"))
continue;
if (!opt->val)
continue;
parse_local_net(opt->val);
}
}
Code: Select all
static void parse_local_net(const char *opt)
{
const char *ptr;
char str[17];
in_addr_t addr;
int mask;
char *endptr;
struct local_net *n;
ptr = strchr(opt, '/');
if (ptr) {
memcpy(str, opt, ptr - opt);
str[ptr - opt] = 0;
addr = inet_addr(str);
if (addr == INADDR_NONE)
goto out_err;
mask = strtoul(ptr + 1, &endptr, 10);
if (mask > 32)
goto out_err;
} else {
addr = inet_addr(opt);
if (addr == INADDR_NONE)
goto out_err;
mask = 24;
}
list_for_each_entry(n, &local_nets, entry) {
if (n->addr == addr && n->mask == mask) {
n->active = 1;
return;
}
}
n = _malloc(sizeof(*n));
n->addr = addr;
n->mask = mask;
n->active = 1;
list_add_tail(&n->entry, &local_nets);
ipoe_nl_add_net(addr, mask);
return;
out_err:
log_error("ipoe: failed to parse 'local-net=%s'\n", opt);
}
static void load_local_nets(struct conf_sect_t *sect)
{
struct conf_option_t *opt;
struct local_net *n;
struct list_head *pos, *t;
list_for_each_entry(n, &local_nets, entry)
n->active = 0;
list_for_each_entry(opt, §->items, entry) {
if (strcmp(opt->name, "local-net"))
continue;
if (!opt->val)
continue;
parse_local_net(opt->val);
}
list_for_each_safe(pos, t, &local_nets) {
n = list_entry(pos, typeof(*n), entry);
if (!n->active) {
ipoe_nl_del_net(n->addr);
list_del(&n->entry);
_free(n);
}
}
}
Code: Select all
# uname -a
Linux ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux