1 Index: git/user/drbdadm_adjust.c
2 ===================================================================
3 --- git.orig/user/drbdadm_adjust.c
4 +++ git/user/drbdadm_adjust.c
5 @@ -157,6 +157,7 @@ static int opts_equal(struct context_def
6 static int addr_equal(struct d_resource* conf, struct d_resource* running)
9 + char *peer_addr, *peer_af, *peer_port;
11 if (conf->peer == NULL && running->peer == NULL) return 1;
12 if (running->peer == NULL) return 0;
13 @@ -165,16 +166,29 @@ static int addr_equal(struct d_resource*
14 !strcmp(conf->me->port, running->me->port) &&
15 !strcmp(conf->me->address_family, running->me->address_family);
19 - !strcmp(conf->me->proxy->inside_addr, running->peer->address) &&
20 - !strcmp(conf->me->proxy->inside_port, running->peer->port) &&
21 - !strcmp(conf->me->proxy->inside_af, running->peer->address_family);
23 - equal = equal && conf->peer &&
24 - !strcmp(conf->peer->address, running->peer->address) &&
25 - !strcmp(conf->peer->port, running->peer->port) &&
26 - !strcmp(conf->peer->address_family, running->peer->address_family);
27 + if(conf->me->proxy) {
28 + peer_addr = conf->me->proxy->inside_addr;
29 + peer_port = conf->me->proxy->inside_port;
30 + peer_af = conf->me->proxy->inside_af;
32 + peer_addr = conf->peer->address;
33 + peer_port = conf->peer->port;
34 + peer_af = conf->peer->address_family;
37 + equal = equal && conf->peer &&
38 + !strcmp(peer_addr, running->peer->address) &&
39 + !strcmp(peer_port, running->peer->port) &&
40 + !strcmp(peer_af, running->peer->address_family);
43 + fprintf(stderr, "Network addresses differ:\n"
44 + "\trunning: %s:%s:%s -- %s:%s:%s\n"
45 + "\t config: %s:%s:%s -- %s:%s:%s\n",
46 + running->me->address_family, running->me->address, running->me->port,
47 + running->peer->address_family, running->peer->address, running->peer->port,
48 + conf->me->address_family, conf->me->address, conf->me->port,
49 + peer_af, peer_addr, peer_port);
53 @@ -690,8 +704,7 @@ int adm_adjust(struct cfg_ctx *ctx)
54 if (ctx->res->me->proxy && can_do_proxy)
55 do_connect |= proxy_reconf(ctx, running);
57 - if (do_connect && running)
58 - do_disconnect = running->net_options != NULL;
59 + do_disconnect = do_connect && running && (running->peer || running->net_options);
62 schedule_deferred_cmd(adm_set_default_res_options, ctx, "resource-options", CFG_RESOURCE);
63 @@ -716,8 +729,12 @@ int adm_adjust(struct cfg_ctx *ctx)
67 - if (do_disconnect && ctx->res->peer)
68 - schedule_deferred_cmd(adm_disconnect, ctx, "disconnect", CFG_NET_PREREQ);
69 + /* "disconnect" specifying the end-point addresses currently in-use,
70 + * before "connect"ing with the addresses currently in-config-file. */
71 + if (do_disconnect) {
72 + struct cfg_ctx tmp_ctx = { .res = running, .vol = vol, };
73 + schedule_deferred_cmd(adm_disconnect, &tmp_ctx, "disconnect", CFG_NET_PREREQ);
75 schedule_deferred_cmd(adm_connect, ctx, "connect", CFG_NET);
78 Index: git/user/legacy/drbdadm_adjust.c
79 ===================================================================
80 --- git.orig/user/legacy/drbdadm_adjust.c
81 +++ git/user/legacy/drbdadm_adjust.c
82 @@ -133,6 +133,7 @@ static int opts_equal(struct d_option* c
83 static int addr_equal(struct d_resource* conf, struct d_resource* running)
86 + char *peer_addr, *peer_af, *peer_port;
88 if (conf->peer == NULL && running->peer == NULL) return 1;
89 if (running->peer == NULL) return 0;
90 @@ -141,18 +142,31 @@ static int addr_equal(struct d_resource*
91 !strcmp(conf->me->port, running->me->port) &&
92 !strcmp(conf->me->address_family, running->me->address_family);
96 - !strcmp(conf->me->proxy->inside_addr, running->peer->address) &&
97 - !strcmp(conf->me->proxy->inside_port, running->peer->port) &&
98 - !strcmp(conf->me->proxy->inside_af, running->peer->address_family);
100 - equal = equal && conf->peer &&
101 - !strcmp(conf->peer->address, running->peer->address) &&
102 - !strcmp(conf->peer->port, running->peer->port) &&
103 - !strcmp(conf->peer->address_family, running->peer->address_family);
104 + if(conf->me->proxy) {
105 + peer_addr = conf->me->proxy->inside_addr;
106 + peer_port = conf->me->proxy->inside_port;
107 + peer_af = conf->me->proxy->inside_af;
109 + peer_addr = conf->peer->address;
110 + peer_port = conf->peer->port;
111 + peer_af = conf->peer->address_family;
114 + equal = equal && conf->peer &&
115 + !strcmp(peer_addr, running->peer->address) &&
116 + !strcmp(peer_port, running->peer->port) &&
117 + !strcmp(peer_af, running->peer->address_family);
120 + fprintf(stderr, "Network addresses differ:\n"
121 + "\trunning: %s:%s:%s -- %s:%s:%s\n"
122 + "\t config: %s:%s:%s -- %s:%s:%s\n",
123 + running->me->address_family, running->me->address, running->me->port,
124 + running->peer->address_family, running->peer->address, running->peer->port,
125 + conf->me->address_family, conf->me->address, conf->me->port,
126 + peer_af, peer_addr, peer_port);
132 static int proto_equal(struct d_resource* conf, struct d_resource* running)