int main() { if (!register_signal_handlers()) { return EXIT_FAILURE; } try { boost::asio::io_service _io_service; asiotap::tap_adapter tap_adapter(_io_service, asiotap::tap_adapter_layer::ethernet); stop_function = boost::bind(&close_tap_adapter, boost::ref(tap_adapter)); tap_adapter.open(); asiotap::tap_adapter_configuration configuration {}; configuration.ipv4.network_address = { boost::asio::ip::address_v4::from_string("9.0.0.1"), 24 }; configuration.ipv6.network_address = { boost::asio::ip::address_v6::from_string("fe80::c887:eb51:aaaa:bbbb"), 64 }; tap_adapter.configure(configuration); tap_adapter.set_connected_state(true); tap_adapter.async_read(boost::asio::buffer(my_buf, sizeof(my_buf)), boost::bind(&read_done, boost::ref(tap_adapter), _1, _2)); const auto addresses = tap_adapter.get_ip_addresses(); std::cout << "Current IP addresses for the interface:" << std::endl; for(auto&& address : addresses) { std::cout << address << std::endl; } _io_service.run(); } catch (std::exception& ex) { std::cerr << "Exception caught: " << ex.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }
int main() { if (!register_signal_handlers()) { return EXIT_FAILURE; } try { boost::asio::io_service _io_service; asiotap::tap_adapter tap_adapter(_io_service, asiotap::tap_adapter_layer::ip); stop_function = boost::bind(&close_tap_adapter, boost::ref(tap_adapter)); tap_adapter.open(); asiotap::tap_adapter_configuration configuration {}; configuration.ipv4.network_address = { boost::asio::ip::address_v4::from_string("9.0.0.1"), 24 }; configuration.ipv4.remote_address = boost::asio::ip::address_v4::from_string("9.0.0.0"); configuration.ipv6.network_address = { boost::asio::ip::address_v6::from_string("fe80::c887:eb51:aaaa:bbbb"), 64 }; tap_adapter.configure(configuration); tap_adapter.set_connected_state(true); tap_adapter.async_read(boost::asio::buffer(my_buf, sizeof(my_buf)), boost::bind(&read_done, boost::ref(tap_adapter), _1, _2)); const auto addresses = tap_adapter.get_ip_addresses(); std::cout << "Current IP addresses for the interface:" << std::endl; for(auto&& address : addresses) { std::cout << address << std::endl; } std::cout << "Adding routes" << std::endl; asiotap::route_manager rmgr(_io_service); rmgr.set_route_registration_success_handler([](const asiotap::route_manager::route_type& route){ std::cout << "Added route: " << route << std::endl; }); rmgr.set_route_registration_failure_handler([](const asiotap::route_manager::route_type& route, const boost::system::system_error& ex){ std::cout << "Failure adding route (" << route << "): " << ex.what() << std::endl; }); rmgr.set_route_unregistration_success_handler([](const asiotap::route_manager::route_type& route){ std::cout << "Removed route: " << route << std::endl; }); rmgr.set_route_unregistration_failure_handler([](const asiotap::route_manager::route_type& route, const boost::system::system_error& ex){ std::cout << "Failure removing route (" << route << "): " << ex.what() << std::endl; }); const auto r1 = rmgr.get_route_entry(tap_adapter.get_route(asiotap::to_ip_route(boost::asio::ip::address_v4::from_string("9.0.1.0"), 24))); const auto r2 = rmgr.get_route_entry(tap_adapter.get_route(asiotap::to_ip_route(boost::asio::ip::address_v4::from_string("9.0.2.0"), 24, boost::asio::ip::address_v4::from_string("9.0.1.2")))); _io_service.run(); } catch (std::exception& ex) { std::cerr << "Exception caught: " << ex.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }