diff options
-rw-r--r-- | usr.sbin/ospfctl/ospfctl.c | 62 | ||||
-rw-r--r-- | usr.sbin/ospfctl/parser.c | 11 | ||||
-rw-r--r-- | usr.sbin/ospfctl/parser.h | 3 | ||||
-rw-r--r-- | usr.sbin/ospfd/interface.c | 3 | ||||
-rw-r--r-- | usr.sbin/ospfd/ospfd.h | 3 |
5 files changed, 74 insertions, 8 deletions
diff --git a/usr.sbin/ospfctl/ospfctl.c b/usr.sbin/ospfctl/ospfctl.c index 339ab1be378..807c286f517 100644 --- a/usr.sbin/ospfctl/ospfctl.c +++ b/usr.sbin/ospfctl/ospfctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ospfctl.c,v 1.29 2006/03/22 15:37:44 claudio Exp $ */ +/* $OpenBSD: ospfctl.c,v 1.30 2006/03/23 18:37:34 norby Exp $ */ /* * Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org> @@ -40,6 +40,7 @@ __dead void usage(void); int show_summary_msg(struct imsg *); int show_interface_msg(struct imsg *); +int show_interface_detail_msg(struct imsg *); const char *print_link(int); const char *fmt_timeframe(time_t t); const char *fmt_timeframe_core(time_t t); @@ -123,6 +124,10 @@ main(int argc, char *argv[]) imsg_compose(ibuf, IMSG_CTL_SHOW_SUM, 0, 0, NULL, 0); break; case SHOW_IFACE: + printf("%-11s %-18s %-6s %-10s %-10s %-8s %3s %3s\n", + "Interface", "Address", "State", "HelloTimer", "Linkstate", + "Uptime", "nc", "ac"); + case SHOW_IFACE_DTAIL: if (*res->ifname) { ifidx = if_nametoindex(res->ifname); if (ifidx == 0) @@ -228,6 +233,9 @@ main(int argc, char *argv[]) case SHOW_IFACE: done = show_interface_msg(&imsg); break; + case SHOW_IFACE_DTAIL: + done = show_interface_detail_msg(&imsg); + break; case SHOW_NBR: done = show_nbr_msg(&imsg); break; @@ -321,6 +329,58 @@ int show_interface_msg(struct imsg *imsg) { struct ctl_iface *iface; + char *netid; + int ifms_type; + + switch (imsg->hdr.type) { + case IMSG_CTL_SHOW_INTERFACE: + iface = imsg->data; + + switch (iface->mediatype) { + case IFT_ETHER: + ifms_type = IFM_ETHER; + break; + case IFT_FDDI: + ifms_type = IFM_FDDI; + break; + case IFT_ISO88025: + ifms_type = IFM_TOKEN; + break; + case IFT_CARP: + ifms_type = IFM_CARP; + break; + default: + ifms_type = 0; + break; + } + + if (asprintf(&netid, "%s/%d", inet_ntoa(iface->addr), + mask2prefixlen(iface->mask.s_addr)) == -1) + err(1, NULL); + printf("%-11s %-18s %-6s %-10s %-10s %s %3d %3d\n", + iface->name, netid, if_state_name(iface->state), + iface->hello_timer < 0 ? "stopped" : + fmt_timeframe_core(iface->hello_timer), + get_linkstate(ifms_type, iface->linkstate), + iface->uptime == 0 ? "00:00:00" : + fmt_timeframe_core(iface->uptime), iface->nbr_cnt, + iface->adj_cnt); + free(netid); + break; + case IMSG_CTL_END: + printf("\n"); + return (1); + default: + break; + } + + return (0); +} + +int +show_interface_detail_msg(struct imsg *imsg) +{ + struct ctl_iface *iface; switch (imsg->hdr.type) { case IMSG_CTL_SHOW_INTERFACE: diff --git a/usr.sbin/ospfctl/parser.c b/usr.sbin/ospfctl/parser.c index 72ce75bc635..11babc4a357 100644 --- a/usr.sbin/ospfctl/parser.c +++ b/usr.sbin/ospfctl/parser.c @@ -1,4 +1,4 @@ -/* $OpenBSD: parser.c,v 1.10 2006/03/22 15:37:44 claudio Exp $ */ +/* $OpenBSD: parser.c,v 1.11 2006/03/23 18:37:34 norby Exp $ */ /* * Copyright (c) 2004 Esben Norby <norby@openbsd.org> @@ -84,9 +84,10 @@ static const struct token t_show[] = { }; static const struct token t_show_iface[] = { - {NOTOKEN, "", NONE, NULL}, - {IFNAME, "", NONE, NULL}, - {ENDTOKEN, "", NONE, NULL} + {NOTOKEN, "", NONE, NULL}, + {KEYWORD, "detail", SHOW_IFACE_DTAIL, NULL}, + {IFNAME, "", SHOW_IFACE_DTAIL, NULL}, + {ENDTOKEN, "", NONE, NULL} }; static const struct token t_show_db[] = { @@ -219,6 +220,8 @@ match_token(const char *word, const struct token table[]) err(1, "interface name too long"); match++; t = &table[i]; + if (t->value) + res.action = t->value; } break; diff --git a/usr.sbin/ospfctl/parser.h b/usr.sbin/ospfctl/parser.h index ac7dea40f42..3386d9883eb 100644 --- a/usr.sbin/ospfctl/parser.h +++ b/usr.sbin/ospfctl/parser.h @@ -1,4 +1,4 @@ -/* $OpenBSD: parser.h,v 1.7 2006/03/22 15:37:44 claudio Exp $ */ +/* $OpenBSD: parser.h,v 1.8 2006/03/23 18:37:34 norby Exp $ */ /* * Copyright (c) 2004 Esben Norby <norby@openbsd.org> @@ -32,6 +32,7 @@ enum actions { SHOW, SHOW_SUM, SHOW_IFACE, + SHOW_IFACE_DTAIL, SHOW_NBR, SHOW_NBR_DTAIL, SHOW_DB, diff --git a/usr.sbin/ospfd/interface.c b/usr.sbin/ospfd/interface.c index 28e9a92d002..32d0d60b6d6 100644 --- a/usr.sbin/ospfd/interface.c +++ b/usr.sbin/ospfd/interface.c @@ -1,4 +1,4 @@ -/* $OpenBSD: interface.c,v 1.48 2006/03/15 13:25:33 claudio Exp $ */ +/* $OpenBSD: interface.c,v 1.49 2006/03/23 18:37:34 norby Exp $ */ /* * Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org> @@ -635,6 +635,7 @@ if_to_ctl(struct iface *iface) ictl.rxmt_interval = iface->rxmt_interval; ictl.type = iface->type; ictl.linkstate = iface->linkstate; + ictl.mediatype = iface->media_type; ictl.priority = iface->priority; ictl.passive = iface->passive; ictl.auth_type = iface->auth_type; diff --git a/usr.sbin/ospfd/ospfd.h b/usr.sbin/ospfd/ospfd.h index bd0bd373286..e65019e5b04 100644 --- a/usr.sbin/ospfd/ospfd.h +++ b/usr.sbin/ospfd/ospfd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ospfd.h,v 1.53 2006/03/22 16:01:20 claudio Exp $ */ +/* $OpenBSD: ospfd.h,v 1.54 2006/03/23 18:37:34 norby Exp $ */ /* * Copyright (c) 2004 Esben Norby <norby@openbsd.org> @@ -435,6 +435,7 @@ struct ctl_iface { u_int16_t rxmt_interval; enum iface_type type; u_int8_t linkstate; + u_int8_t mediatype; u_int8_t priority; u_int8_t passive; enum auth_type auth_type; |