dump: replace pcap_lookupdev with pcap_findalldevs
pcap_lookupdev API is deprecated in favor of pcap_findalldevs.
refs #4797
Change-Id: I0f2a9d17368daa500c1fae0281f0c8171c93415b
diff --git a/tools/dump/ndndump.cpp b/tools/dump/ndndump.cpp
index d5b6571..ed7fd93 100644
--- a/tools/dump/ndndump.cpp
+++ b/tools/dump/ndndump.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
- * Copyright (c) 2011-2019, Regents of the University of California.
+ * Copyright (c) 2011-2022, Regents of the University of California.
*
* This file is part of ndn-tools (Named Data Networking Essential Tools).
* See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -34,6 +34,7 @@
#include <ndn-cxx/lp/nack.hpp>
#include <ndn-cxx/lp/packet.hpp>
#include <ndn-cxx/net/ethernet.hpp>
+#include <ndn-cxx/util/scope.hpp>
#include <ndn-cxx/util/string-helper.hpp>
#include <boost/endian/conversion.hpp>
@@ -96,13 +97,18 @@
char errbuf[PCAP_ERRBUF_SIZE] = {};
if (inputFile.empty() && interface.empty()) {
- const char* defaultDevice = pcap_lookupdev(errbuf);
+ pcap_if_t* allDevs = nullptr;
+ int res = pcap_findalldevs(&allDevs, errbuf);
+ auto freealldevs = ndn::make_scope_exit([=] { pcap_freealldevs(allDevs); });
- if (defaultDevice == nullptr) {
+ if (res != 0) {
NDN_THROW(Error(errbuf));
}
+ if (allDevs == nullptr) {
+ NDN_THROW(Error("No network interface found"));
+ }
- interface = defaultDevice;
+ interface = allDevs->name;
}
std::string action;
@@ -151,9 +157,9 @@
if (res < 0) {
NDN_THROW(Error("Cannot compile pcap filter '" + pcapFilter + "': " + pcap_geterr(m_pcap)));
}
+ auto freecode = ndn::make_scope_exit([&] { pcap_freecode(&program); });
res = pcap_setfilter(m_pcap, &program);
- pcap_freecode(&program);
if (res < 0) {
NDN_THROW(Error("Cannot set pcap filter: "s + pcap_geterr(m_pcap)));
}