Fixes problems with rewriting of kernel device routes.

This commit is contained in:
Ondrej Zajicek 2009-05-29 17:36:37 +02:00
parent 6f68f066b6
commit 51f4469f03

View file

@ -500,7 +500,7 @@ nl_send_route(struct krt_proto *p, rte *e, int new)
bzero(&r.r, sizeof(r.r)); bzero(&r.r, sizeof(r.r));
r.h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE; r.h.nlmsg_type = new ? RTM_NEWROUTE : RTM_DELROUTE;
r.h.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); r.h.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
r.h.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | (new ? NLM_F_CREATE|NLM_F_REPLACE : 0); r.h.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | (new ? NLM_F_CREATE|NLM_F_EXCL : 0);
r.r.rtm_family = BIRD_AF; r.r.rtm_family = BIRD_AF;
r.r.rtm_dst_len = net->n.pxlen; r.r.rtm_dst_len = net->n.pxlen;
@ -540,22 +540,11 @@ nl_send_route(struct krt_proto *p, rte *e, int new)
void void
krt_set_notify(struct krt_proto *p, net *n UNUSED, rte *new, rte *old) krt_set_notify(struct krt_proto *p, net *n UNUSED, rte *new, rte *old)
{ {
if (old && new)
{
/*
* We should check whether priority and TOS is identical as well,
* but we don't use these and default value is always equal to default value. :-)
*/
nl_send_route(p, new, 1);
}
else
{
if (old) if (old)
nl_send_route(p, old, 0); nl_send_route(p, old, 0);
if (new) if (new)
nl_send_route(p, new, 1); nl_send_route(p, new, 1);
}
} }
static struct iface * static struct iface *