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:
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user