From eebd44cfc08641312d6fbfd66a4c4be86cb827a8 Mon Sep 17 00:00:00 2001 From: Tim Kourt Date: Wed, 2 Oct 2019 13:39:56 -0700 Subject: [PATCH] rtnlutil: Add IPv6 route deletion helper --- src/rtnlutil.c | 31 +++++++++++++++++++++++++++++-- src/rtnlutil.h | 7 +++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/rtnlutil.c b/src/rtnlutil.c index 4090d311..f90e9dcf 100644 --- a/src/rtnlutil.c +++ b/src/rtnlutil.c @@ -533,7 +533,8 @@ uint32_t rtnl_ifaddr_ipv6_delete(struct l_netlink *rtnl, int ifindex, ip, cb, user_data, destroy); } -uint32_t rtnl_route_ipv6_add_gateway(struct l_netlink *rtnl, int ifindex, +static uint32_t rtnl_route_ipv6_change(struct l_netlink *rtnl, + uint16_t nlmsg_type, int ifindex, const char *gateway, uint32_t priority_offset, uint8_t proto, @@ -581,7 +582,33 @@ uint32_t rtnl_route_ipv6_add_gateway(struct l_netlink *rtnl, int ifindex, sizeof(struct in6_addr)); } - return l_netlink_send(rtnl, RTM_NEWROUTE, flags, rtmmsg, + return l_netlink_send(rtnl, nlmsg_type, flags, rtmmsg, rta_buf - (void *) rtmmsg, cb, user_data, destroy); } + +uint32_t rtnl_route_ipv6_add_gateway(struct l_netlink *rtnl, int ifindex, + const char *gateway, + uint32_t priority_offset, + uint8_t proto, + l_netlink_command_func_t cb, + void *user_data, + l_netlink_destroy_func_t destroy) +{ + return rtnl_route_ipv6_change(rtnl, RTM_NEWROUTE, ifindex, gateway, + priority_offset, proto, cb, + user_data, destroy); +} + +uint32_t rtnl_route_ipv6_delete_gateway(struct l_netlink *rtnl, int ifindex, + const char *gateway, + uint32_t priority_offset, + uint8_t proto, + l_netlink_command_func_t cb, + void *user_data, + l_netlink_destroy_func_t destroy) +{ + return rtnl_route_ipv6_change(rtnl, RTM_DELROUTE, ifindex, gateway, + priority_offset, proto, cb, + user_data, destroy); +} diff --git a/src/rtnlutil.h b/src/rtnlutil.h index 6689e16e..383d562f 100644 --- a/src/rtnlutil.h +++ b/src/rtnlutil.h @@ -90,3 +90,10 @@ uint32_t rtnl_route_ipv6_add_gateway(struct l_netlink *rtnl, int ifindex, l_netlink_command_func_t cb, void *user_data, l_netlink_destroy_func_t destroy); +uint32_t rtnl_route_ipv6_delete_gateway(struct l_netlink *rtnl, int ifindex, + const char *gateway, + uint32_t priority_offset, + uint8_t proto, + l_netlink_command_func_t cb, + void *user_data, + l_netlink_destroy_func_t destroy);