@@ -368,10 +368,10 @@ void __connman_ipconfig_deladdr(int index, int family, const char *label,
unsigned char prefixlen, const char *address);
void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
const char *dst, const char *gateway,
- uint32_t table_id);
+ uint32_t table_id, uint32_t metric);
void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
const char *dst, const char *gateway,
- uint32_t table_id);
+ uint32_t table_id, uint32_t metric);
void __connman_ipconfig_foreach(void (*function) (int index, void *user_data),
void *user_data);
@@ -1039,7 +1039,7 @@ out:
void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
const char *dst, const char *gateway,
- uint32_t table_id)
+ uint32_t table_id, uint32_t metric)
{
struct connman_ipdevice *ipdevice;
char *ifname;
@@ -1100,9 +1100,10 @@ void __connman_ipconfig_newroute(int index, int family, unsigned char scope,
}
}
- connman_info("%s {add} route %s gw %s scope %u <%s> table %u <%s>",
+ connman_info("%s {add} route %s gw %s scope %u <%s> table %u <%s> "
+ "metric %u",
ifname, dst, gateway, scope, scope2str(scope),
- table_id, __connman_inet_table2string(table_id));
+ table_id, __connman_inet_table2string(table_id), metric);
out:
g_free(ifname);
@@ -1110,7 +1111,7 @@ out:
void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
const char *dst, const char *gateway,
- uint32_t table_id)
+ uint32_t table_id, uint32_t metric)
{
struct connman_ipdevice *ipdevice;
char *ifname;
@@ -1169,9 +1170,10 @@ void __connman_ipconfig_delroute(int index, int family, unsigned char scope,
}
}
- connman_info("%s {del} route %s gw %s scope %u <%s> table %u <%s>",
+ connman_info("%s {del} route %s gw %s scope %u <%s> table %u <%s> "
+ "metric %u",
ifname, dst, gateway, scope, scope2str(scope),
- table_id, __connman_inet_table2string(table_id));
+ table_id, __connman_inet_table2string(table_id), metric);
out:
g_free(ifname);
@@ -746,19 +746,21 @@ static void process_newroute(unsigned char family, unsigned char scope,
char dststr[INET6_ADDRSTRLEN], gatewaystr[INET6_ADDRSTRLEN];
int index = -1;
uint32_t table_id = RT_TABLE_UNSPEC;
+ uint32_t metric = 0;
if (family == AF_INET) {
struct in_addr dst = { INADDR_ANY }, gateway = { INADDR_ANY };
extract_ipv4_route(msg, bytes, &index, &dst, &gateway,
- &table_id, NULL);
+ &table_id, &metric);
inet_ntop(family, &dst, dststr, sizeof(dststr));
inet_ntop(family, &gateway, gatewaystr, sizeof(gatewaystr));
__connman_ipconfig_newroute(index, family, scope, dststr,
gatewaystr,
- table_id);
+ table_id,
+ metric);
/* skip host specific routes */
if (scope != RT_SCOPE_UNIVERSE &&
@@ -773,14 +775,15 @@ static void process_newroute(unsigned char family, unsigned char scope,
gateway = IN6ADDR_ANY_INIT;
extract_ipv6_route(msg, bytes, &index, &dst, &gateway,
- &table_id, NULL);
+ &table_id, &metric);
inet_ntop(family, &dst, dststr, sizeof(dststr));
inet_ntop(family, &gateway, gatewaystr, sizeof(gatewaystr));
__connman_ipconfig_newroute(index, family, scope, dststr,
gatewaystr,
- table_id);
+ table_id,
+ metric);
/* skip host specific routes */
if (scope != RT_SCOPE_UNIVERSE &&
@@ -808,19 +811,21 @@ static void process_delroute(unsigned char family, unsigned char scope,
char dststr[INET6_ADDRSTRLEN], gatewaystr[INET6_ADDRSTRLEN];
int index = -1;
uint32_t table_id = RT_TABLE_UNSPEC;
+ uint32_t metric = 0;
if (family == AF_INET) {
struct in_addr dst = { INADDR_ANY }, gateway = { INADDR_ANY };
extract_ipv4_route(msg, bytes, &index, &dst, &gateway,
- &table_id, NULL);
+ &table_id, &metric);
inet_ntop(family, &dst, dststr, sizeof(dststr));
inet_ntop(family, &gateway, gatewaystr, sizeof(gatewaystr));
__connman_ipconfig_delroute(index, family, scope, dststr,
gatewaystr,
- table_id);
+ table_id,
+ metric);
/* skip host specific routes */
if (scope != RT_SCOPE_UNIVERSE &&
@@ -835,14 +840,15 @@ static void process_delroute(unsigned char family, unsigned char scope,
gateway = IN6ADDR_ANY_INIT;
extract_ipv6_route(msg, bytes, &index, &dst, &gateway,
- &table_id, NULL);
+ &table_id, &metric);
inet_ntop(family, &dst, dststr, sizeof(dststr));
inet_ntop(family, &gateway, gatewaystr, sizeof(gatewaystr));
__connman_ipconfig_delroute(index, family, scope, dststr,
gatewaystr,
- table_id);
+ table_id,
+ metric);
/* skip host specific routes */
if (scope != RT_SCOPE_UNIVERSE &&
From: Grant Erickson <erick205@umn.edu> This adds support for extracting and passing the Routing Netlink (rtnl) metric/priority to '__connman_ipconfig_{new,del}route' from 'process_{new,del}route'. --- src/connman.h | 4 ++-- src/ipconfig.c | 14 ++++++++------ src/rtnl.c | 22 ++++++++++++++-------- 3 files changed, 24 insertions(+), 16 deletions(-)