netd: Route MTU
- Route may include optional MTU parameter
- Change route is added so routes don't need to be deleted then re-added
- Add/Del/Change functions to pass route info as parcel
Bug: 142892223
Test: new unit tests
Change-Id: Idc32ecb0520b1f4136b3fe0e3f7b6800fb3005a6
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp
index 3e428ff..6a11f92 100644
--- a/server/NetworkController.cpp
+++ b/server/NetworkController.cpp
@@ -585,13 +585,18 @@
}
int NetworkController::addRoute(unsigned netId, const char* interface, const char* destination,
- const char* nexthop, bool legacy, uid_t uid) {
- return modifyRoute(netId, interface, destination, nexthop, true, legacy, uid);
+ const char* nexthop, bool legacy, uid_t uid, int mtu) {
+ return modifyRoute(netId, interface, destination, nexthop, ROUTE_ADD, legacy, uid, mtu);
+}
+
+int NetworkController::updateRoute(unsigned netId, const char* interface, const char* destination,
+ const char* nexthop, bool legacy, uid_t uid, int mtu) {
+ return modifyRoute(netId, interface, destination, nexthop, ROUTE_UPDATE, legacy, uid, mtu);
}
int NetworkController::removeRoute(unsigned netId, const char* interface, const char* destination,
const char* nexthop, bool legacy, uid_t uid) {
- return modifyRoute(netId, interface, destination, nexthop, false, legacy, uid);
+ return modifyRoute(netId, interface, destination, nexthop, ROUTE_REMOVE, legacy, uid, 0);
}
void NetworkController::addInterfaceAddress(unsigned ifIndex, const char* address) {
@@ -768,7 +773,8 @@
}
int NetworkController::modifyRoute(unsigned netId, const char* interface, const char* destination,
- const char* nexthop, bool add, bool legacy, uid_t uid) {
+ const char* nexthop, enum RouteOperation op, bool legacy,
+ uid_t uid, int mtu) {
ScopedRLock lock(mRWLock);
if (!isValidNetworkLocked(netId)) {
@@ -798,8 +804,15 @@
tableType = RouteController::INTERFACE;
}
- return add ? RouteController::addRoute(interface, destination, nexthop, tableType) :
- RouteController::removeRoute(interface, destination, nexthop, tableType);
+ switch (op) {
+ case ROUTE_ADD:
+ return RouteController::addRoute(interface, destination, nexthop, tableType, mtu);
+ case ROUTE_UPDATE:
+ return RouteController::updateRoute(interface, destination, nexthop, tableType, mtu);
+ case ROUTE_REMOVE:
+ return RouteController::removeRoute(interface, destination, nexthop, tableType);
+ }
+ return -EINVAL;
}
int NetworkController::modifyFallthroughLocked(unsigned vpnNetId, bool add) {