1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-31 17:18:04 +03:00

ctdb-common: Reimplement ctdb_sys_have_ip() using new infrastructure

It can now be used when net.ipv4.ip_nonlocal_bind=1.

This makes the recovery daemon's local IP verification inefficient.
It can be optimised in a subsequent commit.

Fall back to bind() if unable to fetch IPs.

Signed-off-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: John Mulligan <jmulligan@redhat.com>
Reviewed-by: Anoop C S <anoopcs@samba.org>
This commit is contained in:
Martin Schwenke 2024-09-29 12:05:31 +10:00 committed by Anoop C S
parent a489b6699d
commit 0536d7a98b
2 changed files with 24 additions and 4 deletions

View File

@ -160,10 +160,7 @@ bool ctdb_sys_local_ip_check(const struct ctdb_sys_local_ips_context *ips_ctx,
return false; return false;
} }
/* bool ctdb_sys_bind_ip_check(const ctdb_sock_addr *_addr)
* See if the given IP is currently on an interface
*/
bool ctdb_sys_have_ip(const ctdb_sock_addr *_addr)
{ {
int s; int s;
int ret; int ret;
@ -193,6 +190,28 @@ bool ctdb_sys_have_ip(const ctdb_sock_addr *_addr)
return ret == 0; return ret == 0;
} }
/*
* See if the given IP is currently on an interface
*/
bool ctdb_sys_have_ip(const ctdb_sock_addr *addr)
{
struct ctdb_sys_local_ips_context *ips_ctx = NULL;
bool have_ip;
int ret;
ret = ctdb_sys_local_ips_init(NULL, &ips_ctx);
if (ret != 0) {
DBG_DEBUG("Failed to get local addresses, depending on bind\n");
have_ip = ctdb_sys_bind_ip_check(addr);
return have_ip;
}
have_ip = ctdb_sys_local_ip_check(ips_ctx, addr);
talloc_free(ips_ctx);
return have_ip;
}
/* /*
* simple TCP checksum - assumes data is multiple of 2 bytes long * simple TCP checksum - assumes data is multiple of 2 bytes long
*/ */

View File

@ -30,6 +30,7 @@ int ctdb_sys_local_ips_init(TALLOC_CTX *ctx,
struct ctdb_sys_local_ips_context **ips_ctx); struct ctdb_sys_local_ips_context **ips_ctx);
bool ctdb_sys_local_ip_check(const struct ctdb_sys_local_ips_context *ips_ctx, bool ctdb_sys_local_ip_check(const struct ctdb_sys_local_ips_context *ips_ctx,
const ctdb_sock_addr *addr); const ctdb_sock_addr *addr);
bool ctdb_sys_bind_ip_check(const ctdb_sock_addr *addr);
bool ctdb_sys_have_ip(const ctdb_sock_addr *addr); bool ctdb_sys_have_ip(const ctdb_sock_addr *addr);
int ctdb_sys_send_arp(const ctdb_sock_addr *addr, const char *iface); int ctdb_sys_send_arp(const ctdb_sock_addr *addr, const char *iface);