diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c index dd7ffab0..bc7d9741 100644 --- a/proto/ospf/ospf.c +++ b/proto/ospf/ospf.c @@ -197,12 +197,24 @@ ospf_get_status(struct proto *p, byte *buf) } } +static void +ospf_get_route_info(rte *rte, byte *buf, ea_list *attrs) +{ + char met=' '; + + if(rte->u.ospf.type=='E') met='1'; + if(rte->u.ospf.metric2!=0) met='2'; + buf += bsprintf(buf, " %c%c %d", rte->u.ospf.type, met, + (rte->u.ospf.metric2==0) ? rte->u.ospf.metric1 : rte->u.ospf.metric2); +} + struct protocol proto_ospf = { - name: "OSPF", - template: "ospf%d", - init: ospf_init, - dump: ospf_dump, - start: ospf_start, - shutdown: ospf_shutdown, - get_status: ospf_get_status + name: "OSPF", + template: "ospf%d", + init: ospf_init, + dump: ospf_dump, + start: ospf_start, + shutdown: ospf_shutdown, + get_route_info: ospf_get_route_info, + get_status: ospf_get_status }; diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index d50e438a..6b4c18f3 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -229,6 +229,7 @@ again: e->u.ospf.metric1=nf->metric; e->u.ospf.metric2=0; e->u.ospf.tag=0; /* FIXME Some config? */ + e->u.ospf.type='I'; e->pflags = 0; e->net=ne; e->pref = p->preference; @@ -448,6 +449,7 @@ noch: e->u.ospf.metric1=nf->metric; e->u.ospf.metric2=nf->metric2; e->u.ospf.tag=0; /* FIXME Some config? */ + e->u.ospf.type='E'; e->pflags = 0; e->net=ne; e->pref = p->preference;