summaryrefslogtreecommitdiff
path: root/accel-pppd/libnetlink/iputils.c
diff options
context:
space:
mode:
authorGuillaume Nault <g.nault@alphalink.fr>2018-12-19 19:13:08 +0100
committerDmitry Kozlov <xeb@mail.ru>2018-12-20 06:21:28 +0300
commit6f6f7f2efb9432efe7d3b4f749022da2cfc39fb3 (patch)
treebb45d7278f274715e819eda54aaa03656fe1ebed /accel-pppd/libnetlink/iputils.c
parent7951559fbc6d75e930ee50a0ed18da3912439e25 (diff)
downloadaccel-ppp-6f6f7f2efb9432efe7d3b4f749022da2cfc39fb3.tar.gz
accel-ppp-6f6f7f2efb9432efe7d3b4f749022da2cfc39fb3.zip
iputils: add 'src' and 'gw' parameters to iproute_del()
Rework iproute_del() to have the same parameters as iproute_add(). This will allow callers to specify more precisely the route they want to delete. Callers will later be converted to make use of these parameters to ensure that the removed route precisely matches the one that was originaly inserted. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Diffstat (limited to 'accel-pppd/libnetlink/iputils.c')
-rw-r--r--accel-pppd/libnetlink/iputils.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/accel-pppd/libnetlink/iputils.c b/accel-pppd/libnetlink/iputils.c
index 343088f..5f830f0 100644
--- a/accel-pppd/libnetlink/iputils.c
+++ b/accel-pppd/libnetlink/iputils.c
@@ -500,7 +500,7 @@ int __export iproute_add(int ifindex, in_addr_t src, in_addr_t dst, in_addr_t gw
return r;
}
-int __export iproute_del(int ifindex, in_addr_t dst, int proto, int mask, uint32_t prio)
+int __export iproute_del(int ifindex, in_addr_t src, in_addr_t dst, in_addr_t gw, int proto, int mask, uint32_t prio)
{
struct ipaddr_req {
struct nlmsghdr n;
@@ -525,12 +525,15 @@ int __export iproute_del(int ifindex, in_addr_t dst, int proto, int mask, uint32
req.i.rtm_type = RTN_UNICAST;
req.i.rtm_dst_len = mask;
- addattr32(&req.n, sizeof(req), RTA_DST, dst);
-
if (ifindex)
addattr32(&req.n, sizeof(req), RTA_OIF, ifindex);
+ if (src)
+ addattr32(&req.n, sizeof(req), RTA_PREFSRC, src);
+ if (gw)
+ addattr32(&req.n, sizeof(req), RTA_GATEWAY, gw);
if (prio)
addattr32(&req.n, sizeof(req), RTA_PRIORITY, prio);
+ addattr32(&req.n, sizeof(req), RTA_DST, dst);
if (rtnl_talk(rth, &req.n, 0, 0, NULL, NULL, NULL, 0) < 0)
r = -1;