Added show ospf interface.
show ospf neighbors now knows "<interface>".
This commit is contained in:
parent
58740ed4c5
commit
c4f0f01408
5 changed files with 95 additions and 10 deletions
|
@ -15,6 +15,8 @@ CF_DECLS
|
||||||
CF_KEYWORDS(OSPF, AREA, OSPF_METRIC1, OSPF_METRIC2, OSPF_TAG)
|
CF_KEYWORDS(OSPF, AREA, OSPF_METRIC1, OSPF_METRIC2, OSPF_TAG)
|
||||||
CF_KEYWORDS(NEIGHBORS)
|
CF_KEYWORDS(NEIGHBORS)
|
||||||
|
|
||||||
|
%type <t> opttext
|
||||||
|
|
||||||
CF_GRAMMAR
|
CF_GRAMMAR
|
||||||
|
|
||||||
CF_ADDTO(proto, ospf_proto '}')
|
CF_ADDTO(proto, ospf_proto '}')
|
||||||
|
@ -34,7 +36,12 @@ ospf_proto:
|
||||||
ospf_area: AREA idval {
|
ospf_area: AREA idval {
|
||||||
((struct ospf_config *)this_proto)->area = $2;
|
((struct ospf_config *)this_proto)->area = $2;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
opttext:
|
||||||
|
TEXT
|
||||||
|
| /* empty */ { $$ = NULL; }
|
||||||
|
;
|
||||||
|
|
||||||
CF_ADDTO(dynamic_attr, OSPF_METRIC1 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC1); })
|
CF_ADDTO(dynamic_attr, OSPF_METRIC1 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC1); })
|
||||||
CF_ADDTO(dynamic_attr, OSPF_METRIC2 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC2); })
|
CF_ADDTO(dynamic_attr, OSPF_METRIC2 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC2); })
|
||||||
|
@ -43,8 +50,11 @@ CF_ADDTO(dynamic_attr, OSPF_TAG { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEM
|
||||||
CF_CLI(SHOW OSPF, optsym, [<name>], [[Show information about ospf protocol]])
|
CF_CLI(SHOW OSPF, optsym, [<name>], [[Show information about ospf protocol]])
|
||||||
{ ospf_sh(proto_get_named($3, &proto_ospf)); } ;
|
{ ospf_sh(proto_get_named($3, &proto_ospf)); } ;
|
||||||
|
|
||||||
CF_CLI(SHOW OSPF NEIGHBORS, optsym, [<name>], [[Show information about ospf neighbors]])
|
CF_CLI(SHOW OSPF NEIGHBORS, optsym opttext, [<name>] [\"<interface>\"], [[Show information about ospf neighbors]])
|
||||||
{ ospf_sh_neigh(proto_get_named($4, &proto_ospf)); } ;
|
{ ospf_sh_neigh(proto_get_named($4, &proto_ospf), $5); } ;
|
||||||
|
|
||||||
|
CF_CLI(SHOW OSPF INTERFACE, optsym opttext, [<name>] [\"<interface>\"], [[Show infomation about interface]])
|
||||||
|
{ ospf_sh_iface(proto_get_named($4, &proto_ospf), $5); };
|
||||||
|
|
||||||
CF_CODE
|
CF_CODE
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ char *ospf_is[]={ "down", "loop", "waiting", "point-to-point", "drother",
|
||||||
char *ospf_ism[]={ "interface up", "wait timer fired", "backup seen",
|
char *ospf_ism[]={ "interface up", "wait timer fired", "backup seen",
|
||||||
"neighbor change", "loop indicated", "unloop indicated", "interface down"};
|
"neighbor change", "loop indicated", "unloop indicated", "interface down"};
|
||||||
|
|
||||||
|
char *ospf_it[]={ "broadcast", "nbma", "point-to-point", "virtual link" };
|
||||||
|
|
||||||
void
|
void
|
||||||
iface_chstate(struct ospf_iface *ifa, u8 state)
|
iface_chstate(struct ospf_iface *ifa, u8 state)
|
||||||
{
|
{
|
||||||
|
@ -406,3 +408,22 @@ ospf_if_notify(struct proto *p, unsigned flags, struct iface *iface)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ospf_iface_info(struct ospf_iface *ifa)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
cli_msg(-1015,"Interface \"%s\":", ifa->iface->name);
|
||||||
|
cli_msg(-1015,"\tArea: %I (%u)", ifa->oa->areaid, ifa->oa->areaid);
|
||||||
|
cli_msg(-1015,"\tType: %s", ospf_it[ifa->type]);
|
||||||
|
cli_msg(-1015,"\tState: %s", ospf_is[ifa->state]);
|
||||||
|
cli_msg(-1015,"\tPriority: %u", ifa->priority);
|
||||||
|
cli_msg(-1015,"\tCost: %u", ifa->cost);
|
||||||
|
cli_msg(-1015,"\tHello timer: %u", ifa->helloint);
|
||||||
|
cli_msg(-1015,"\tWait timer: %u", ifa->waitint);
|
||||||
|
cli_msg(-1015,"\tDead timer: %u", ifa->deadc*ifa->helloint);
|
||||||
|
cli_msg(-1015,"\tRetransmit timer: %u", ifa->rxmtint);
|
||||||
|
cli_msg(-1015,"\tDesigned router (ID): %I", ifa->drid);
|
||||||
|
cli_msg(-1015,"\tDesigned router (IP): %I", ifa->drip);
|
||||||
|
cli_msg(-1015,"\tBackup designed router (ID): %I", ifa->bdrid);
|
||||||
|
cli_msg(-1015,"\tBackup designed router (IP): %I", ifa->bdrip);
|
||||||
|
}
|
||||||
|
|
|
@ -21,5 +21,6 @@ void ospf_add_timers(struct ospf_iface *ifa, pool *pool);
|
||||||
void ospf_iface_default(struct ospf_iface *ifa);
|
void ospf_iface_default(struct ospf_iface *ifa);
|
||||||
struct ospf_iface *find_iface(struct proto_ospf *p, struct iface *what);
|
struct ospf_iface *find_iface(struct proto_ospf *p, struct iface *what);
|
||||||
void ospf_if_notify(struct proto *p, unsigned flags, struct iface *iface);
|
void ospf_if_notify(struct proto *p, unsigned flags, struct iface *iface);
|
||||||
|
void ospf_iface_info(struct ospf_iface *ifa);
|
||||||
|
|
||||||
#endif /* _BIRD_OSPF_IFACE_H_ */
|
#endif /* _BIRD_OSPF_IFACE_H_ */
|
||||||
|
|
|
@ -318,19 +318,38 @@ struct protocol proto_ospf = {
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
ospf_sh_neigh(struct proto *p)
|
ospf_sh_neigh(struct proto *p, char *iff)
|
||||||
{
|
{
|
||||||
struct ospf_iface *ifa;
|
struct ospf_iface *ifa=NULL,*f;
|
||||||
struct ospf_neighbor *n;
|
struct ospf_neighbor *n;
|
||||||
struct proto_ospf *po=(struct proto_ospf *)p;
|
struct proto_ospf *po=(struct proto_ospf *)p;
|
||||||
|
|
||||||
|
if(iff!=NULL)
|
||||||
|
{
|
||||||
|
WALK_LIST(f, po->iface_list)
|
||||||
|
{
|
||||||
|
if(strcmp(iff,f->iface->name)==0) ifa=f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(ifa==NULL)
|
||||||
|
{
|
||||||
|
cli_msg(0,"");
|
||||||
|
return;
|
||||||
|
}
|
||||||
cli_msg(-1013,"%s:", p->name);
|
cli_msg(-1013,"%s:", p->name);
|
||||||
cli_msg(-1013,"%-12s\t%3s\t%-15s\t%-5s\t%-12s\t%-10s","Router ID","Pri",
|
cli_msg(-1013,"%-12s\t%3s\t%-15s\t%-5s\t%-12s\t%-10s","Router ID","Pri",
|
||||||
" State", "DTime", "Router IP", "Interface");
|
" State", "DTime", "Router IP", "Interface");
|
||||||
WALK_LIST(ifa,po->iface_list)
|
WALK_LIST(n, ifa->neigh_list) ospf_sh_neigh_info(n);
|
||||||
WALK_LIST(n, ifa->neigh_list)
|
|
||||||
ospf_sh_neigh_info(n);
|
|
||||||
cli_msg(0,"");
|
cli_msg(0,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
cli_msg(-1013,"%s:", p->name);
|
||||||
|
cli_msg(-1013,"%-12s\t%3s\t%-15s\t%-5s\t%-12s\t%-10s","Router ID","Pri",
|
||||||
|
" State", "DTime", "Router IP", "Interface");
|
||||||
|
WALK_LIST(ifa,po->iface_list)
|
||||||
|
WALK_LIST(n, ifa->neigh_list)
|
||||||
|
ospf_sh_neigh_info(n);
|
||||||
|
cli_msg(0,"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -371,3 +390,36 @@ ospf_sh(struct proto *p)
|
||||||
cli_msg(0,"");
|
cli_msg(0,"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ospf_sh_iface(struct proto *p, char *iff)
|
||||||
|
{
|
||||||
|
struct ospf_area *oa;
|
||||||
|
struct proto_ospf *po=(struct proto_ospf *)p;
|
||||||
|
struct ospf_iface *ifa=NULL,*f;
|
||||||
|
struct ospf_neighbor *n;
|
||||||
|
int ifano;
|
||||||
|
int nno;
|
||||||
|
int adjno;
|
||||||
|
|
||||||
|
if(iff!=NULL)
|
||||||
|
{
|
||||||
|
WALK_LIST(f, po->iface_list)
|
||||||
|
{
|
||||||
|
if(strcmp(iff,f->iface->name)==0) ifa=f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(ifa==NULL)
|
||||||
|
{
|
||||||
|
cli_msg(0,"");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cli_msg(-1015,"%s:", p->name);
|
||||||
|
ospf_iface_info(ifa);
|
||||||
|
cli_msg(0,"");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cli_msg(-1015,"%s:", p->name);
|
||||||
|
WALK_LIST(ifa, po->iface_list) ospf_iface_info(ifa);
|
||||||
|
cli_msg(0,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -362,8 +362,9 @@ void ospf_rt_notify(struct proto *p, net *n, rte *new, rte *old,ea_list *attrs);
|
||||||
void area_disp(timer *timer);
|
void area_disp(timer *timer);
|
||||||
void schedule_rt_lsa(struct ospf_area *oa);
|
void schedule_rt_lsa(struct ospf_area *oa);
|
||||||
void schedule_rtcalc(struct ospf_area *oa);
|
void schedule_rtcalc(struct ospf_area *oa);
|
||||||
void ospf_sh_neigh(struct proto *p);
|
void ospf_sh_neigh(struct proto *p, char *iff);
|
||||||
void ospf_sh(struct proto *p);
|
void ospf_sh(struct proto *p);
|
||||||
|
void ospf_sh_iface(struct proto *p, char *iff);
|
||||||
|
|
||||||
#define EA_OSPF_METRIC1 EA_CODE(EAP_OSPF, 0)
|
#define EA_OSPF_METRIC1 EA_CODE(EAP_OSPF, 0)
|
||||||
#define EA_OSPF_METRIC2 EA_CODE(EAP_OSPF, 1)
|
#define EA_OSPF_METRIC2 EA_CODE(EAP_OSPF, 1)
|
||||||
|
|
Loading…
Reference in a new issue