From: Remi Gacogne Date: Fri, 19 Jan 2024 08:53:48 +0000 (+0100) Subject: dnsdist: Log whether we are using XSK, and which mode (native or emulated) X-Git-Tag: dnsdist-1.9.0-rc1^2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73dc64aba93eda49a1a81b2e97b236afc9b2e00b;p=thirdparty%2Fpdns.git dnsdist: Log whether we are using XSK, and which mode (native or emulated) --- diff --git a/pdns/dnsdist-lua.cc b/pdns/dnsdist-lua.cc index 724af95c67..8d931a4c1f 100644 --- a/pdns/dnsdist-lua.cc +++ b/pdns/dnsdist-lua.cc @@ -630,9 +630,6 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) // create but don't connect the socket in client or check-config modes auto ret = std::make_shared(std::move(config), std::move(tlsCtx), !(client || configCheck)); - if (!(client || configCheck)) { - infolog("Added downstream server %s", ret->d_config.remote.toStringWithPort()); - } #ifdef HAVE_XSK std::shared_ptr xskSocket; if (getOptionalValue>(vars, "xskSocket", xskSocket) > 0) { @@ -652,6 +649,14 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) } memcpy(ret->d_config.destMACAddr.data(), mac.data(), ret->d_config.destMACAddr.size()); } + infolog("Added downstream server %s via XSK in %s mode", ret->d_config.remote.toStringWithPort(), xskSocket->getXDPMode()); + } + else if (!(client || configCheck)) { + infolog("Added downstream server %s", ret->d_config.remote.toStringWithPort()); + } +#else /* HAVE_XSK */ + if (!(client || configCheck)) { + infolog("Added downstream server %s", ret->d_config.remote.toStringWithPort()); } #endif /* HAVE_XSK */ if (autoUpgrade && ret->getProtocol() != dnsdist::Protocol::DoT && ret->getProtocol() != dnsdist::Protocol::DoH) { @@ -794,6 +799,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) udpCS->xskInfo->sharedEmptyFrameOffset = socket->sharedEmptyFrameOffset; socket->addWorker(udpCS->xskInfo); socket->addWorkerRoute(udpCS->xskInfo, loc); + vinfolog("Enabling XSK in %s mode for incoming UDP packets to %s", socket->getXDPMode(), loc.toStringWithPort()); } #endif /* HAVE_XSK */ g_frontends.push_back(std::move(udpCS)); @@ -847,6 +853,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) udpCS->xskInfo->sharedEmptyFrameOffset = socket->sharedEmptyFrameOffset; socket->addWorker(udpCS->xskInfo); socket->addWorkerRoute(udpCS->xskInfo, loc); + vinfolog("Enabling XSK in %s mode for incoming UDP packets to %s", socket->getXDPMode(), loc.toStringWithPort()); } #endif /* HAVE_XSK */ g_frontends.push_back(std::move(udpCS)); diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index f58442b034..6f4bca6c68 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -2624,6 +2624,11 @@ static void setupLocalSocket(ClientState& clientState, const ComboAddress& addr, else if (clientState.dnscryptCtx != nullptr) { infolog("Listening on %s for DNSCrypt", addr.toStringWithPort()); } +#ifdef HAVE_XSK + else if (clientState.xskInfo != nullptr) { + infolog("Listening on %s (XSK-enabled)", addr.toStringWithPort()); + } +#endif else { infolog("Listening on %s", addr.toStringWithPort()); } diff --git a/pdns/xsk.cc b/pdns/xsk.cc index 3c4f8d3b7b..0eaf081106 100644 --- a/pdns/xsk.cc +++ b/pdns/xsk.cc @@ -470,6 +470,28 @@ std::string XskSocket::getMetrics() const return ret.str(); } +[[nodiscard]] std::string XskSocket::getXDPMode() const +{ + unsigned int itfIdx = if_nametoindex(ifName.c_str()); + if (itfIdx == 0) { + return {}; + } + struct bpf_xdp_query_opts info = { .sz = sizeof(info) }; + int ret = bpf_xdp_query(itfIdx, 0, &info); + if (ret != 0) { + return {}; + } + switch (info.attach_mode) { + case XDP_ATTACHED_DRV: + case XDP_ATTACHED_HW: + return "native"; + case XDP_ATTACHED_SKB: + return "emulated"; + default: + return "unknown"; + } +} + void XskSocket::markAsFree(const XskPacket& packet) { auto offset = frameOffset(packet); diff --git a/pdns/xsk.hh b/pdns/xsk.hh index 4ea36e38b3..3b16717989 100644 --- a/pdns/xsk.hh +++ b/pdns/xsk.hh @@ -148,6 +148,7 @@ public: void addWorkerRoute(const std::shared_ptr& worker, const ComboAddress& dest); void removeWorkerRoute(const ComboAddress& dest); [[nodiscard]] std::string getMetrics() const; + [[nodiscard]] std::string getXDPMode() const; void markAsFree(const XskPacket& packet); [[nodiscard]] const std::shared_ptr& getWorkerByDescriptor(int desc) const {