X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/e6d6991c815cb4b06efc4b3be4c631e0ef166bc4..2d80199d7bc25b4c6e4a5ac986f8902770e82d96:/site.c diff --git a/site.c b/site.c index db78d5f..4ce4c24 100644 --- a/site.c +++ b/site.c @@ -1147,6 +1147,10 @@ static bool_t process_msg0(struct site *st, struct buffer_if *msg0, case LABEL_MSG7: /* We must forget about the current session. */ delete_keys(st,"request from peer",LOG_SEC); + /* probably, the peer is shutting down, and this is going to fail, + * but we need to be trying to bring the link up again */ + if (st->keepalive) + initiate_key_setup(st,"peer requested key teardown",0); return True; case LABEL_MSG9: /* Deliver to netlink layer */ @@ -1179,6 +1183,13 @@ static void dump_packet(struct site *st, struct buffer_if *buf, ok?"":" - fail"); } +static bool_t comm_addr_sendmsg(struct site *st, + const struct comm_addr *dest, + struct buffer_if *buf) +{ + return dest->comm->sendmsg(dest->comm->st, buf, dest, 0); +} + static uint32_t site_status(void *st) { return 0; @@ -1606,7 +1617,7 @@ static void generate_send_prod(struct site *st, slog(st,LOG_SETUP_INIT,"prodding peer for key exchange"); st->allow_send_prod=0; generate_prod(st,&st->scratch); - bool_t ok = source->comm->sendmsg(source->comm->st, &st->scratch, source); + bool_t ok = comm_addr_sendmsg(st, source, &st->scratch); dump_packet(st,&st->scratch,source,False,ok); } @@ -2355,8 +2366,7 @@ void transport_xmit(struct site *st, transport_peers *peers, int nfailed=0; for (slot=0; slotnpeers; slot++) { transport_peer *peer=&peers->peers[slot]; - bool_t ok = - peer->addr.comm->sendmsg(peer->addr.comm->st, buf, &peer->addr); + bool_t ok = comm_addr_sendmsg(st, &peer->addr, buf); if (candebug) dump_packet(st, buf, &peer->addr, False, ok); if (!ok) {