static uavcan_linux::SubNodePtr initSubNode(unsigned num_ifaces, uavcan::INode& main_node)
{
    std::cout << "Initializing sub node" << std::endl;

    typedef VirtualCanDriver<QueuePoolSize> Driver;

    std::shared_ptr<Driver> driver(new Driver(num_ifaces));
    auto node = uavcan_linux::makeSubNode(driver);
    node->setNodeID(main_node.getNodeID());

    main_node.getDispatcher().installRxFrameListener(driver.get());

    return node;
}