1
0
mirror of https://github.com/openbsd/src.git synced 2026-04-23 05:34:18 +00:00

Handle connected routes as ospfd(8) does.

OK remi@
This commit is contained in:
denis
2020-04-05 18:19:04 +00:00
parent 35a84b1c5d
commit 55dcbf22b1
4 changed files with 31 additions and 18 deletions

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: ospf6ctl.c,v 1.50 2019/05/26 09:27:09 remi Exp $ */
/* $OpenBSD: ospf6ctl.c,v 1.51 2020/04/05 18:19:04 denis Exp $ */
/*
* Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org>
@@ -1103,10 +1103,10 @@ show_rib_msg(struct imsg *imsg)
errx(1, "Invalid route type");
}
printf("%-20s %-17s %-12s %-9s %-7d %s\n", dstnet,
printf("%-20s %-16s%s %-12s %-9s %-7d %s\n", dstnet,
log_in6addr_scope(&rt->nexthop, rt->ifindex),
path_type_name(rt->p_type), dst_type_name(rt->d_type),
rt->cost,
rt->connected ? "C" : " ", path_type_name(rt->p_type),
dst_type_name(rt->d_type), rt->cost,
rt->uptime == 0 ? "-" : fmt_timeframe_core(rt->uptime));
free(dstnet);
break;

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: ospf6d.h,v 1.45 2020/01/21 20:38:52 remi Exp $ */
/* $OpenBSD: ospf6d.h,v 1.46 2020/04/05 18:19:04 denis Exp $ */
/*
* Copyright (c) 2004, 2007 Esben Norby <norby@openbsd.org>
@@ -483,6 +483,7 @@ struct ctl_rt {
enum dst_type d_type;
u_int8_t flags;
u_int8_t prefixlen;
u_int8_t connected;
};
struct ctl_sum {

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: rde.c,v 1.85 2020/03/29 11:59:11 denis Exp $ */
/* $OpenBSD: rde.c,v 1.86 2020/04/05 18:19:04 denis Exp $ */
/*
* Copyright (c) 2004, 2005 Claudio Jeker <claudio@openbsd.org>
@@ -886,6 +886,9 @@ rde_send_change_kroute(struct rt_node *r)
TAILQ_FOREACH(rn, &r->nexthop, entry) {
if (rn->invalid)
continue;
if (rn->connected)
/* skip self-originated routes */
continue;
krcount++;
bzero(&kr, sizeof(kr));
@@ -899,8 +902,12 @@ rde_send_change_kroute(struct rt_node *r)
kr.ext_tag = r->ext_tag;
imsg_add(wbuf, &kr, sizeof(kr));
}
if (krcount == 0)
fatalx("rde_send_change_kroute: no valid nexthop found");
if (krcount == 0) {
/* no valid nexthop or self originated, so remove */
ibuf_free(wbuf);
rde_send_delete_kroute(r);
return;
}
imsg_close(&iev_main->ibuf, wbuf);
imsg_event_add(iev_main);

View File

@@ -1,4 +1,4 @@
/* $OpenBSD: rde_spf.c,v 1.27 2020/03/29 11:59:11 denis Exp $ */
/* $OpenBSD: rde_spf.c,v 1.28 2020/04/05 18:19:04 denis Exp $ */
/*
* Copyright (c) 2005 Esben Norby <norby@openbsd.org>
@@ -897,7 +897,9 @@ rt_nexthop_add(struct rt_node *r, struct v_nexthead *vnh, u_int16_t type,
rn->ifindex = vn->ifindex;
rn->adv_rtr.s_addr = adv_rtr.s_addr;
rn->uptime = now.tv_sec;
rn->connected = vn->prev == spf_root;
rn->connected = (type == LSA_TYPE_NETWORK &&
vn->prev == spf_root) ||
(IN6_IS_ADDR_UNSPECIFIED(&vn->nexthop));
rn->invalid = 0;
r->invalid = 0;
@@ -952,21 +954,24 @@ rt_dump(struct in_addr area, pid_t pid, u_int8_t r_type)
fatalx("rt_dump: invalid RIB type");
}
memset(&rtctl, 0, sizeof(rtctl));
rtctl.prefix = r->prefix;
rtctl.area.s_addr = r->area.s_addr;
rtctl.cost = r->cost;
rtctl.cost2 = r->cost2;
rtctl.p_type = r->p_type;
rtctl.d_type = r->d_type;
rtctl.flags = r->flags;
rtctl.prefixlen = r->prefixlen;
TAILQ_FOREACH(rn, &r->nexthop, entry) {
if (rn->invalid)
continue;
rtctl.prefix = r->prefix;
rtctl.connected = rn->connected;
rtctl.nexthop = rn->nexthop;
rtctl.ifindex = rn->ifindex;
rtctl.area.s_addr = r->area.s_addr;
rtctl.adv_rtr.s_addr = rn->adv_rtr.s_addr;
rtctl.cost = r->cost;
rtctl.cost2 = r->cost2;
rtctl.p_type = r->p_type;
rtctl.d_type = r->d_type;
rtctl.flags = r->flags;
rtctl.prefixlen = r->prefixlen;
rtctl.uptime = now.tv_sec - rn->uptime;
rde_imsg_compose_ospfe(IMSG_CTL_SHOW_RIB, 0, pid,