summaryrefslogtreecommitdiff
path: root/lib/resolver.c
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas.abraitis@gmail.com>2021-12-01 08:12:33 +0200
committerGitHub <noreply@github.com>2021-12-01 08:12:33 +0200
commite2144103f81c5bd46f734bc94e1dbc0aebb66f6e (patch)
treeb7a657150a5c54a2a196476047bb90d3d5ec5c41 /lib/resolver.c
parentf1f6716d4a7a428d0939bf5d5a9a13f54e2924f1 (diff)
parentc742573b67f9b1be953da8f67f417182e7e5dbcb (diff)
Merge pull request #9878 from pguibert6WIND/resolver_vrf
lib: resolver per vrf support
Diffstat (limited to 'lib/resolver.c')
-rw-r--r--lib/resolver.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/resolver.c b/lib/resolver.c
index e3dba5f8ae..29138bbc8d 100644
--- a/lib/resolver.c
+++ b/lib/resolver.c
@@ -21,6 +21,7 @@
#include "resolver.h"
#include "command.h"
#include "xref.h"
+#include "vrf.h"
XREF_SETUP();
@@ -244,7 +245,7 @@ static int resolver_cb_literal(struct thread *t)
return 0;
}
-void resolver_resolve(struct resolver_query *query, int af,
+void resolver_resolve(struct resolver_query *query, int af, vrf_id_t vrf_id,
const char *hostname,
void (*callback)(struct resolver_query *, const char *,
int, union sockunion *))
@@ -279,7 +280,18 @@ void resolver_resolve(struct resolver_query *query, int af,
if (resolver_debug)
zlog_debug("[%p] Resolving '%s'", query, hostname);
+ ret = vrf_switch_to_netns(vrf_id);
+ if (ret < 0) {
+ flog_err_sys(EC_LIB_SOCKET, "%s: Can't switch to VRF %u (%s)",
+ __func__, vrf_id, safe_strerror(errno));
+ return;
+ }
ares_gethostbyname(state.channel, hostname, af, ares_address_cb, query);
+ ret = vrf_switchback_to_initial();
+ if (ret < 0)
+ flog_err_sys(EC_LIB_SOCKET,
+ "%s: Can't switchback from VRF %u (%s)", __func__,
+ vrf_id, safe_strerror(errno));
resolver_update_timeouts(&state);
}