Server API to only allow networking by VPN apps

Secure virtual networks already create rules to route all traffic into
theirselves. This depends on the secure network already existing.

API creates an ip rule at a priority level below SECURE_VPN which
can catch traffic before VPN comes up, if it is a requirement that no
traffic ever leaves without first going through VPN.

Bug: 26694104
Bug: 26354134
Change-Id: If23df0760c6eb0ad137fc26c5124e48edf23b722
diff --git a/server/UidRanges.cpp b/server/UidRanges.cpp
index 64c1b45..a2b8dde 100644
--- a/server/UidRanges.cpp
+++ b/server/UidRanges.cpp
@@ -75,6 +75,15 @@
     return true;
 }
 
+void UidRanges::createFrom(const std::vector<android::net::UidRange>& ranges) {
+    mRanges.resize(ranges.size());
+    std::transform(ranges.begin(), ranges.end(), mRanges.begin(),
+            [](const android::net::UidRange& range) {
+                return Range(range.getStart(), range.getStop());
+            });
+    std::sort(mRanges.begin(), mRanges.end());
+}
+
 void UidRanges::add(const UidRanges& other) {
     auto middle = mRanges.insert(mRanges.end(), other.mRanges.begin(), other.mRanges.end());
     std::inplace_merge(mRanges.begin(), middle, mRanges.end());