aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Erickson <erick205@umn.edu>2023-12-04 17:39:00 -0800
committerMarcel Holtmann <marcel@holtmann.org>2023-12-08 01:55:44 +0100
commitda70292ccb6a138b8dfdb243aeba9d6bf6e5b158 (patch)
treecabf660e4bcaf231acff1726ad6adb295b90ca89
parentd9e66dae7bce8b3b7fa96209b0e1b609c1f572c7 (diff)
downloadconnman-da70292ccb6a138b8dfdb243aeba9d6bf6e5b158.tar.gz
inet: Add '__connman_inet_{add,del}_default_{to,from}_table_with_metric'.
This adds two new functions for adding a gateway default route: '__connman_inet_{add,del}_default_{to,from}_table_with_metric', which expands on the existing '__connman_inet_{add,del}_default_{to,from}_table' by allowing the caller to pass a non-zero metric/priority.
-rw-r--r--src/connman.h8
-rw-r--r--src/inet.c30
2 files changed, 38 insertions, 0 deletions
diff --git a/src/connman.h b/src/connman.h
index d9ce353c4..472429bfc 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -254,9 +254,17 @@ int __connman_inet_rtnl_addattr32(struct nlmsghdr *n, size_t maxlen,
int __connman_inet_add_fwmark_rule(uint32_t table_id, int family, uint32_t fwmark);
int __connman_inet_del_fwmark_rule(uint32_t table_id, int family, uint32_t fwmark);
int __connman_inet_add_default_to_table(uint32_t table_id, int ifindex, const char *gateway);
+int __connman_inet_add_default_to_table_with_metric(uint32_t table_id,
+ int ifindex,
+ const char *gateway,
+ uint32_t metric);
int __connman_inet_add_subnet_to_table(uint32_t table_id, int ifindex,
const char *gateway, unsigned char prefixlen);
int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex, const char *gateway);
+int __connman_inet_del_default_from_table_with_metric(uint32_t table_id,
+ int ifindex,
+ const char *gateway,
+ uint32_t metric);
int __connman_inet_del_subnet_from_table(uint32_t table_id, int ifindex,
const char *gateway, unsigned char prefixlen);
int __connman_inet_get_address_netmask(int ifindex,
diff --git a/src/inet.c b/src/inet.c
index 5c5100e25..3270a854e 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -3382,6 +3382,21 @@ int __connman_inet_add_default_to_table(uint32_t table_id, int ifindex,
gateway, prefixlen);
}
+int __connman_inet_add_default_to_table_with_metric(uint32_t table_id,
+ int ifindex,
+ const char *gateway,
+ uint32_t metric)
+{
+ static const unsigned char prefixlen = 0;
+
+ /*
+ * ip route add default/0 via <gateway> dev wlan0 table <table_id>
+ * metric <metric>
+ */
+ return iproute_default_modify(RTM_NEWROUTE, table_id, metric, ifindex,
+ gateway, prefixlen);
+}
+
int __connman_inet_add_subnet_to_table(uint32_t table_id, int ifindex,
const char *gateway, unsigned char prefixlen)
{
@@ -3438,6 +3453,21 @@ int __connman_inet_del_default_from_table(uint32_t table_id, int ifindex,
gateway, prefixlen);
}
+int __connman_inet_del_default_from_table_with_metric(uint32_t table_id,
+ int ifindex,
+ const char *gateway,
+ uint32_t metric)
+{
+ static const unsigned char prefixlen = 0;
+
+ /*
+ * ip route del default/0 via <gateway> dev wlan0 table <table_id>
+ * metric <metric>
+ */
+ return iproute_default_modify(RTM_DELROUTE, table_id, metric, ifindex,
+ gateway, prefixlen);
+}
+
int __connman_inet_del_subnet_from_table(uint32_t table_id, int ifindex,
const char *gateway, unsigned char prefixlen)
{