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:
Tobias Brunner 2016-10-12 12:28:18 +02:00
parent 2406474158
commit 62b58a40da

View File

@ -51,6 +51,7 @@ typedef struct {
private_bypass_lan_listener_t *listener; private_bypass_lan_listener_t *listener;
host_t *net; host_t *net;
uint8_t mask; uint8_t mask;
char *iface;
child_cfg_t *cfg; child_cfg_t *cfg;
} bypass_policy_t; } bypass_policy_t;
@ -72,6 +73,7 @@ static void bypass_policy_destroy(bypass_policy_t *this)
ts->destroy(ts); ts->destroy(ts);
} }
this->net->destroy(this->net); this->net->destroy(this->net);
free(this->iface);
free(this); free(this);
} }
@ -115,6 +117,7 @@ static job_requeue_t update_bypass(private_bypass_lan_listener_t *this)
INIT(lookup, INIT(lookup,
.net = net->clone(net), .net = net->clone(net),
.mask = mask, .mask = mask,
.iface = strdupnull(iface),
); );
seen->put(seen, lookup, lookup); 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 = { child_cfg_create_t child = {
.mode = MODE_PASS, .mode = MODE_PASS,
.interface = iface,
}; };
child_cfg_t *cfg; child_cfg_t *cfg;
traffic_selector_t *ts; 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, ts = traffic_selector_create_from_subnet(net->clone(net), mask,
0, 0, 65535); 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 = child_cfg_create(name, &child);
cfg->add_traffic_selector(cfg, FALSE, ts->clone(ts)); 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, INIT(found,
.net = net->clone(net), .net = net->clone(net),
.mask = mask, .mask = mask,
.iface = strdupnull(iface),
.cfg = cfg, .cfg = cfg,
); );
this->policies->put(this->policies, found, found); this->policies->put(this->policies, found, found);