Skip to content

Commit

Permalink
Whenever a summary route is activated, install a respective blackhole
Browse files Browse the repository at this point in the history
route in the FIB.
  • Loading branch information
rwestphal committed Oct 27, 2015
1 parent dda887f commit 0f0e6c2
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 6 deletions.
2 changes: 2 additions & 0 deletions kroute.c
Original file line number Diff line number Diff line change
Expand Up @@ -1107,6 +1107,8 @@ send_rtmsg_v4(int fd, int action, struct kroute *kr)
hdr.rtm_fmask = RTF_REJECT|RTF_BLACKHOLE;
else
hdr.rtm_flags = RTF_MPATH;
if (kr->flags & F_BLACKHOLE)
hdr.rtm_flags |= RTF_BLACKHOLE;
hdr.rtm_seq = kr_state.rtseq++; /* overflow doesn't matter */
hdr.rtm_msglen = sizeof(hdr);
/* adjust iovec */
Expand Down
50 changes: 44 additions & 6 deletions rde.c
Original file line number Diff line number Diff line change
Expand Up @@ -501,11 +501,30 @@ rde_send_change_kroute(struct rt_node *rn, struct eigrp_route *route)
memcpy(&kr.nexthop, &route->nexthop, sizeof(kr.nexthop));
else
memcpy(&kr.nexthop, &route->nbr->addr, sizeof(kr.nexthop));
kr.ifindex = route->nbr->ei->iface->ifindex;
if (route->nbr->ei)
kr.ifindex = route->nbr->ei->iface->ifindex;
else {
switch (eigrp->af) {
case AF_INET:
inet_pton(AF_INET, "127.0.0.1", &kr.nexthop.v4);
break;
case AF_INET6:
inet_pton(AF_INET, "::1", &kr.nexthop.v6);
break;
default:
fatalx("rde_send_delete_kroute: unknown af");
break;
}
kr.flags = F_BLACKHOLE;
}
if (route->type == EIGRP_ROUTE_EXTERNAL)
kr.priority = rdeconf->fib_priority_external;
else
kr.priority = rdeconf->fib_priority_internal;
else {
if (route->nbr->flags & F_RDE_NBR_SUMMARY)
kr.priority = rdeconf->fib_priority_summary;
else
kr.priority = rdeconf->fib_priority_internal;
}

rde_imsg_compose_parent(IMSG_KROUTE_CHANGE, 0, &kr, sizeof(kr));

Expand All @@ -529,11 +548,30 @@ rde_send_delete_kroute(struct rt_node *rn, struct eigrp_route *route)
memcpy(&kr.nexthop, &route->nexthop, sizeof(kr.nexthop));
else
memcpy(&kr.nexthop, &route->nbr->addr, sizeof(kr.nexthop));
kr.ifindex = route->nbr->ei->iface->ifindex;
if (route->nbr->ei)
kr.ifindex = route->nbr->ei->iface->ifindex;
else {
switch (eigrp->af) {
case AF_INET:
inet_pton(AF_INET, "127.0.0.1", &kr.nexthop.v4);
break;
case AF_INET6:
inet_pton(AF_INET, "::1", &kr.nexthop.v6);
break;
default:
fatalx("rde_send_delete_kroute: unknown af");
break;
}
kr.flags = F_BLACKHOLE;
}
if (route->type == EIGRP_ROUTE_EXTERNAL)
kr.priority = rdeconf->fib_priority_external;
else
kr.priority = rdeconf->fib_priority_internal;
else {
if (route->nbr->flags & F_RDE_NBR_SUMMARY)
kr.priority = rdeconf->fib_priority_summary;
else
kr.priority = rdeconf->fib_priority_internal;
}

rde_imsg_compose_parent(IMSG_KROUTE_DELETE, 0, &kr, sizeof(kr));

Expand Down

0 comments on commit 0f0e6c2

Please sign in to comment.