ncsid: Import from gBMC

This is the initial code drop from gBMC.

Google-Bug-Id: 179618516
Upstream: 1e71af914bc8c54d8b91d0a1cf377e2696713c2f
Change-Id: Ic653e8271dacd205e04f2bc713071ef2ec5936a4
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/ncsid/src/ncsid.cpp b/ncsid/src/ncsid.cpp
new file mode 100644
index 0000000..58842c1
--- /dev/null
+++ b/ncsid/src/ncsid.cpp
@@ -0,0 +1,33 @@
+#include <ncsi_sockio.h>
+#include <ncsi_state_machine.h>
+#include <net_config.h>
+
+#include <iostream>
+
+int main(int argc, char* argv[])
+{
+    if (argc != 2)
+    {
+        std::cout << "Usage: " << argv[0] << " <interface_name>" << std::endl;
+        return -1;
+    }
+
+    std::string iface_name(argv[1]);
+
+    net::PhosphorConfig net_config(iface_name);
+    net::IFace eth(iface_name);
+
+    ncsi::SockIO ncsi_sock;
+    ncsi_sock.init();
+    ncsi_sock.bind_to_iface(eth);
+    ncsi_sock.filter_vlans();
+
+    ncsi::StateMachine ncsi_fsm;
+    ncsi_fsm.set_sockio(&ncsi_sock);
+    ncsi_fsm.set_net_config(&net_config);
+
+    // If run ever returns -- it's an error.
+    ncsi_fsm.run();
+
+    return -1;
+}