[Swan-dev] pluto: Fix multiple RW connections with kernel_netlink
Herbert Xu
herbert at gondor.apana.org.au
Sun May 3 03:37:22 EEST 2015
As it is you can never have more than one RW connection under
kernel_netlink because they all share the same reqid copied over
from the template. Since the reqid is used by kernel_netlink to
identify SAs for the same connection, this means that the second
RW connection will always kick the first one off.
This patch fixes this by allocating a new reqid for each instance.
Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
diff --git a/programs/pluto/connections.c b/programs/pluto/connections.c
index 9140673..258458f 100644
--- a/programs/pluto/connections.c
+++ b/programs/pluto/connections.c
@@ -1582,11 +1582,7 @@ char *add_group_instance(struct connection *group, const ip_subnet *target)
t->log_file = NULL;
t->log_file_err = FALSE;
- if (group->spd.reqid) {
- t->spd.reqid = group->spd.reqid;
- } else {
- t->spd.reqid = gen_reqid();
- }
+ t->spd.reqid = gen_reqid();
if (t->spd.that.virt) {
DBG_log("virtual_ip not supported in group instance");
@@ -1668,11 +1664,7 @@ struct connection *instantiate(struct connection *c, const ip_address *him,
default_end(&d->spd.this, &d->spd.that.host_addr);
d->spd.next = NULL;
- if (c->spd.reqid) {
- d->spd.reqid = c->spd.reqid;
- } else {
- d->spd.reqid = gen_reqid();
- }
+ d->spd.reqid = gen_reqid();
/* set internal fields */
d->ac_next = connections;
--
Email: Herbert Xu <herbert at gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
More information about the Swan-dev
mailing list