diff options
Diffstat (limited to 'sysdep/unix')
-rw-r--r-- | sysdep/unix/krt-set.c | 25 | ||||
-rw-r--r-- | sysdep/unix/krt.c | 11 |
2 files changed, 13 insertions, 23 deletions
diff --git a/sysdep/unix/krt-set.c b/sysdep/unix/krt-set.c index 2165255e..ca00a2cd 100644 --- a/sysdep/unix/krt-set.c +++ b/sysdep/unix/krt-set.c @@ -26,6 +26,10 @@ krt_capable(rte *e) { rta *a = e->attrs; +#ifdef CONFIG_AUTO_ROUTES + if (a->source == RTS_DEVICE) + return 0; +#endif return a->cast == RTC_UNICAST && (a->dest == RTD_ROUTER @@ -37,18 +41,6 @@ krt_capable(rte *e) !a->tos; } -static inline int -krt_capable_op(rte *e) -{ - rta *a = e->attrs; - -#ifdef CONFIG_AUTO_ROUTES - if (a->source == RTS_DEVICE) - return 0; -#endif - return krt_capable(e); -} - static void krt_ioctl(int ioc, rte *e, char *name) { @@ -84,12 +76,12 @@ krt_ioctl(int ioc, rte *e, char *name) log(L_ERR "%s(%I/%d): %m", name, net->n.prefix, net->n.pxlen); } -static void +static inline void krt_remove_route(rte *old) { net *net = old->net; - if (!krt_capable_op(old)) + if (!krt_capable(old)) { DBG("krt_remove_route(ignored %I/%d)\n", net->n.prefix, net->n.pxlen); return; @@ -98,12 +90,12 @@ krt_remove_route(rte *old) krt_ioctl(SIOCDELRT, old, "SIOCDELRT"); } -static void +static inline void krt_add_route(rte *new) { net *net = new->net; - if (!krt_capable_op(new)) + if (!krt_capable(new)) { DBG("krt_add_route(ignored %I/%d)\n", net->n.prefix, net->n.pxlen); return; @@ -115,7 +107,6 @@ krt_add_route(rte *new) void krt_set_notify(struct proto *x, net *net, rte *new, rte *old) { - /* FIXME: Fold remove/add route here */ if (old) krt_remove_route(old); if (new) diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c index aa875ccf..9ad42379 100644 --- a/sysdep/unix/krt.c +++ b/sysdep/unix/krt.c @@ -88,12 +88,11 @@ krt_got_route(struct krt_proto *p, rte *e) return; } - old = net->routes; - if (old && !krt_capable(old)) - old = NULL; - if (old) + if (old = net->routes) { - if (krt_uptodate(e, net->routes)) + if (!krt_capable(old)) + verdict = krt_capable(e) ? KRF_DELETE : KRF_SEEN; + else if (krt_uptodate(e, net->routes)) verdict = KRF_SEEN; else verdict = KRF_UPDATE; @@ -156,7 +155,7 @@ krt_prune(struct krt_proto *p) DBG("krt_prune: removing inherited %I/%d\n", n->n.prefix, n->n.pxlen); rte_update(n, pp, NULL); } - else + else if (krt_capable(new)) { DBG("krt_prune: reinstalling %I/%d\n", n->n.prefix, n->n.pxlen); krt_set_notify(pp, n, new, NULL); |