main: Enabling UnixStreamSocket in nfd app
Change-Id: I5a860e5445413cb72e71ecdffb158970809a0fe5
diff --git a/daemon/main.cpp b/daemon/main.cpp
index bdb01e6..8da8012 100644
--- a/daemon/main.cpp
+++ b/daemon/main.cpp
@@ -10,6 +10,7 @@
#include "mgmt/internal-face.hpp"
#include "mgmt/fib-manager.hpp"
#include "face/tcp-channel-factory.hpp"
+#include "face/unix-stream-channel-factory.hpp"
namespace nfd {
@@ -31,6 +32,7 @@
bool m_showUsage;
std::pair<std::string, std::string> m_tcpListen;
std::vector<TcpOutgoing> m_tcpOutgoings;
+ std::string m_unixListen;
};
static boost::asio::io_service g_ioService;
@@ -40,18 +42,23 @@
static TcpChannelFactory* g_tcpFactory;
static shared_ptr<TcpChannel> g_tcpChannel;
static shared_ptr<InternalFace> g_internalFace;
+static UnixStreamChannelFactory* g_unixFactory;
+static shared_ptr<UnixStreamChannel> g_unixChannel;
void
usage(char* programName)
{
printf(
"%s --help\n\tshow this help and exit\n"
- "%s [--tcp-listen <0.0.0.0:6363>] "
- "[--tcp-connect <192.0.2.1:6363> [--prefix </example>]]\n"
+ "%s [--tcp-listen \"0.0.0.0:6363\"] "
+ "[--unix-listen \"/var/run/nfd.sock\"] "
+ "[--tcp-connect \"192.0.2.1:6363\" "
+ "[--prefix </example>]]\n"
"\trun forwarding daemon\n"
- "\t--tcp-listen: listen on IP and port\n"
- "\t--tcp-connect: connect to IP and port (can occur multiple times)\n"
- "\t--prefix: add this face as nexthop to FIB entry "
+ "\t--tcp-listen <ip:port>: listen on IP and port\n"
+ "\t--unix-listen <unix-socket-path>: listen on Unix socket\n"
+ "\t--tcp-connect <ip:port>: connect to IP and port (can occur multiple times)\n"
+ "\t--prefix <NDN name>: add this face as nexthop to FIB entry "
"(must appear after --tcp-connect, can occur multiple times)\n"
"\n",
programName, programName
@@ -74,6 +81,7 @@
{
g_options.m_showUsage = false;
g_options.m_tcpListen = std::make_pair("0.0.0.0", "6363");
+ g_options.m_unixListen = "/var/run/nfd.sock";
g_options.m_tcpOutgoings.clear();
while (1) {
@@ -83,6 +91,7 @@
{ "tcp-listen" , required_argument, 0, 0 },
{ "tcp-connect" , required_argument, 0, 0 },
{ "prefix" , required_argument, 0, 0 },
+ { "unix-listen" , required_argument, 0, 0 },
{ 0 , 0 , 0, 0 }
};
int c = getopt_long_only(argc, argv, "", long_options, &option_index);
@@ -105,6 +114,10 @@
return false;
}
g_options.m_tcpOutgoings.back().m_prefixes.push_back(Name(::optarg));
+ break;
+ case 4://unix-listen
+ g_options.m_unixListen = ::optarg;
+ break;
}
break;
}
@@ -162,6 +175,17 @@
}
void
+initializeUnix()
+{
+ g_unixFactory = new UnixStreamChannelFactory(g_ioService);
+ g_unixChannel = g_unixFactory->create(g_options.m_unixListen);
+
+ g_unixChannel->listen(
+ bind(&onFaceEstablish, _1, static_cast<std::vector<Name>*>(0)),
+ &onFaceError);
+}
+
+void
initializeMgmt()
{
g_internalFace = make_shared<InternalFace>();
@@ -190,7 +214,10 @@
g_forwarder = new Forwarder(g_ioService);
initializeTcp();
+ initializeUnix();
initializeMgmt();
+
+ /// \todo Add signal processing to gracefully terminate the app
try {
g_ioService.run();