Linux C/C++ код для обновления маршрутов (route -n; ip route)

2 500 руб. за проект • безналичный расчёт, электронные деньги
01 марта 2019, 18:44 • 4 отклика • 48 просмотров

Функция для добавления (обновления) маршрута под Linux

http://man7.org/linux/man-pages/man7/rtnetlink.7.h...
https://stackoverflow.com/questions/11788326/extra...

https://oroboro.com/linux-routing-tables-in-c/
https://stackoverflow.com/questions/17648440/speci...
https://stackoverflow.com/questions/22733967/linux...
и так далее

есть простой вариант
sudo ip route add 1.1.1.1 dev wlan1
когда мы добавляем один адрс (/32 подсеть)

но больше мне нравиться вариант с replace
sudo ip route replace 1.1.1.1 dev tun0
sudo ip route replace 10.111.0.0/16 dev tun0
которому без разницы был ли до этого маршрут или нет
даже если он был (в том числе на другом интерфейсе), в режиме "replace" маршрут будет заменен

еще нужен (возможно)
ip route flush cache который просто открывает "/proc/sys/net/ipv4/route/flush"
и пишет в него -1 (если не путаю - нао выяснить как положено)

все это надо реализовать без popen() разумется

int updroute (std::string s, std::string d) {
return 0; // if ok, -1 if err
}

итого у меня
в "s" попадает адрес в формате 1.2.3.4 или подсеть в формате 1.2.3.0/24
в "d" попадает имя интерфейса, например tun0 или wlan1

задача обновить маршрут, если он существовал до этого (на другом интерфейсе, на другой шлюз и так далее) - удалить и записать заново

чисто сишная задача, мы работаем на С++11, gcc