bypass-lan: Configure interface on bypass policy
Currently, only the kernel-netlink plugin supports this, the others will just ignore it.
This commit is contained in:
parent
2406474158
commit
62b58a40da
|
@ -51,6 +51,7 @@ typedef struct {
|
|||
private_bypass_lan_listener_t *listener;
|
||||
host_t *net;
|
||||
uint8_t mask;
|
||||
char *iface;
|
||||
child_cfg_t *cfg;
|
||||
} bypass_policy_t;
|
||||
|
||||
|
@ -72,6 +73,7 @@ static void bypass_policy_destroy(bypass_policy_t *this)
|
|||
ts->destroy(ts);
|
||||
}
|
||||
this->net->destroy(this->net);
|
||||
free(this->iface);
|
||||
free(this);
|
||||
}
|
||||
|
||||
|
@ -115,6 +117,7 @@ static job_requeue_t update_bypass(private_bypass_lan_listener_t *this)
|
|||
INIT(lookup,
|
||||
.net = net->clone(net),
|
||||
.mask = mask,
|
||||
.iface = strdupnull(iface),
|
||||
);
|
||||
seen->put(seen, lookup, lookup);
|
||||
|
||||
|
@ -123,6 +126,7 @@ static job_requeue_t update_bypass(private_bypass_lan_listener_t *this)
|
|||
{
|
||||
child_cfg_create_t child = {
|
||||
.mode = MODE_PASS,
|
||||
.interface = iface,
|
||||
};
|
||||
child_cfg_t *cfg;
|
||||
traffic_selector_t *ts;
|
||||
|
@ -130,7 +134,7 @@ static job_requeue_t update_bypass(private_bypass_lan_listener_t *this)
|
|||
|
||||
ts = traffic_selector_create_from_subnet(net->clone(net), mask,
|
||||
0, 0, 65535);
|
||||
snprintf(name, sizeof(name), "Bypass LAN %R", ts);
|
||||
snprintf(name, sizeof(name), "Bypass LAN %R [%s]", ts, iface ?: "");
|
||||
|
||||
cfg = child_cfg_create(name, &child);
|
||||
cfg->add_traffic_selector(cfg, FALSE, ts->clone(ts));
|
||||
|
@ -141,6 +145,7 @@ static job_requeue_t update_bypass(private_bypass_lan_listener_t *this)
|
|||
INIT(found,
|
||||
.net = net->clone(net),
|
||||
.mask = mask,
|
||||
.iface = strdupnull(iface),
|
||||
.cfg = cfg,
|
||||
);
|
||||
this->policies->put(this->policies, found, found);
|
||||
|
|
Loading…
Reference in New Issue