使用 libnl-3-route "Invalid input data or parameter"添加路由
Adding route with libnl-3-route "Invalid input data or parameter"
我正在尝试使用libnl-3路由添加路由(内核2.6.32-57)。我使用文档:
- NetLink Library
- NetLink路由
但是路由章为空...;)
问题是带有"无效输入数据或参数"的内核响应。我已经使用Netlink进行了一些测试,如果设置以下属性,我可以添加路由:
- 接口索引
- 目标地址
- 网关地址
-
mask
int ret = 0; // Create the route. struct rtnl_route* rulesRoute = rtnl_route_alloc(); rtnl_route_set_iif(rulesRoute, AF_INET); // IPV4 // Set parameters. rtnl_route_set_scope(rulesRoute, RT_SCOPE_UNIVERSE); rtnl_route_set_table(rulesRoute, RT_TABLE_MAIN); rtnl_route_set_protocol(rulesRoute, RTPROT_STATIC); uint8_t maskTest = 16; rtnl_route_set_scope(rulesRoute, maskTest); // Set the destination. char destinationAddr[] = "0.0.0.0"; nl_addr* dstAddr = nl_addr_build(AF_INET, destinationAddr, 8); ret = rtnl_route_set_dst(rulesRoute, dstAddr); if (ret != 0) std::cout << "Error in setting destination route: " << nl_geterror(ret) << std::endl; // Set the next hop. struct rtnl_nexthop* route_nexthop = rtnl_route_nh_alloc(); char gatewayAddr[] = "10.110.0.240"; nl_addr* gatewAddr = nl_addr_build(AF_INET, gatewayAddr, 12); rtnl_route_nh_set_gateway(route_nexthop, gatewAddr); rtnl_route_nh_set_ifindex(route_nexthop, 2); rtnl_route_add_nexthop(rulesRoute, route_nexthop); ret = rtnl_route_add(m_nlSocket, rulesRoute, 0); if (ret != 0) std::cout << "Kernel response:" << nl_geterror(ret) << std::endl;
我添加了信息我的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.110.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth3
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth3
0.0.0.0 10.110.0.1 0.0.0.0 UG 0 0 0 eth3
感谢您帮助解决此问题
问题来自函数NL_ADDR_BUILD的不良使用。
替换为nl_addr_parse(),这在工作。
nl_addr_build:解析二进制ADDR
nl_addr_parse:解析char* addr喜欢" 10.10.1.10"
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 使用 libnl-3-route "Invalid input data or parameter"添加路由