mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 13:27:53 +00:00
ospfd: Add Link-State support
This patch allows to store Link State Information received through the various LSAs into a dedicated Traffic Engineering Database (TED). This feature is automatically activated once mpls-te is enabled. A new CLI command `mpls-te export` permits to export the TED to other daemons through the new ZAPI Opaque Link State messages. In complement, a new CLI command `show ip ospf mpls-te database ...` output the contains of the TED to the console. Major modifications take place in ospf_te.[c, h]. File ospf_zebra.c has been modified to handle TED synchronisation request. Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
This commit is contained in:
parent
2efd7e2bdc
commit
f173deb352
@ -823,6 +823,13 @@ Traffic Engineering
|
|||||||
flood in AREA <area-id> with Opaque Type-10, respectively in AS with Opaque
|
flood in AREA <area-id> with Opaque Type-10, respectively in AS with Opaque
|
||||||
Type-11. In all case, Opaque-LSA TLV=6.
|
Type-11. In all case, Opaque-LSA TLV=6.
|
||||||
|
|
||||||
|
.. index:: mpls-te export
|
||||||
|
.. clicmd:: no mpls-te export
|
||||||
|
|
||||||
|
Export Traffic Engineering Data Base to other daemons through the ZAPI
|
||||||
|
Opaque Link State messages.
|
||||||
|
|
||||||
|
.. index:: show ip ospf mpls-te interface
|
||||||
.. clicmd:: show ip ospf mpls-te interface
|
.. clicmd:: show ip ospf mpls-te interface
|
||||||
|
|
||||||
.. clicmd:: show ip ospf mpls-te interface INTERFACE
|
.. clicmd:: show ip ospf mpls-te interface INTERFACE
|
||||||
@ -833,6 +840,20 @@ Traffic Engineering
|
|||||||
|
|
||||||
Show Traffic Engineering router parameters.
|
Show Traffic Engineering router parameters.
|
||||||
|
|
||||||
|
.. index:: show ip ospf mpls-te database [verbose|json]
|
||||||
|
.. clicmd:: show ip ospf mpls-te database [verbose|json]
|
||||||
|
|
||||||
|
.. index:: show ip ospf mpls-te database vertex [self-originate|adv-router ADV-ROUTER] [verbose|json]
|
||||||
|
.. clicmd:: show ip ospf mpls-te database vertex [self-originate|adv-router ADV-ROUTER] [verbose|json]
|
||||||
|
|
||||||
|
.. index:: show ip ospf mpls-te database edge [A.B.C.D] [verbose|json]
|
||||||
|
.. clicmd:: show ip ospf mpls-te database edge [A.B.C.D] [verbose|json]
|
||||||
|
|
||||||
|
.. index:: show ip ospf mpls-te database subnet [A.B.C.D/M] [verbose|json]
|
||||||
|
.. clicmd:: show ip ospf mpls-te database subnet [A.B.C.D/M] [verbose|json]
|
||||||
|
|
||||||
|
Show Traffic Engineering Database
|
||||||
|
|
||||||
.. _router-information:
|
.. _router-information:
|
||||||
|
|
||||||
Router Information
|
Router Information
|
||||||
|
1776
ospfd/ospf_te.c
1776
ospfd/ospf_te.c
File diff suppressed because it is too large
Load Diff
@ -340,9 +340,13 @@ struct te_link_subtlv {
|
|||||||
|
|
||||||
/* Following structure are internal use only. */
|
/* Following structure are internal use only. */
|
||||||
struct ospf_mpls_te {
|
struct ospf_mpls_te {
|
||||||
/* Status of MPLS-TE: enable or disbale */
|
/* Status of MPLS-TE: enable or disable */
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|
||||||
|
/* Traffic Engineering Database i.e. Link State */
|
||||||
|
struct ls_ted *ted;
|
||||||
|
bool export;
|
||||||
|
|
||||||
/* RFC5392 */
|
/* RFC5392 */
|
||||||
enum inter_as_mode inter_as;
|
enum inter_as_mode inter_as;
|
||||||
struct in_addr interas_areaid;
|
struct in_addr interas_areaid;
|
||||||
@ -418,4 +422,15 @@ extern void set_linkparams_llri(struct mpls_te_link *, uint32_t, uint32_t);
|
|||||||
extern void set_linkparams_lrrid(struct mpls_te_link *, struct in_addr,
|
extern void set_linkparams_lrrid(struct mpls_te_link *, struct in_addr,
|
||||||
struct in_addr);
|
struct in_addr);
|
||||||
|
|
||||||
|
struct zapi_opaque_reg_info;
|
||||||
|
/**
|
||||||
|
* Call when a client send a Link State Sync message. In turn, OSPF will send
|
||||||
|
* the contain of the Link State Data base.
|
||||||
|
*
|
||||||
|
* @param info ZAPI Opaque message information
|
||||||
|
*
|
||||||
|
* @return 0 on success, -1 otherwise
|
||||||
|
*/
|
||||||
|
extern int ospf_te_sync_ted(struct zapi_opaque_reg_info dst);
|
||||||
|
|
||||||
#endif /* _ZEBRA_OSPF_MPLS_TE_H */
|
#endif /* _ZEBRA_OSPF_MPLS_TE_H */
|
||||||
|
@ -2043,6 +2043,7 @@ static int ospf_opaque_msg_handler(ZAPI_CALLBACK_ARGS)
|
|||||||
struct zapi_opaque_msg info;
|
struct zapi_opaque_msg info;
|
||||||
struct ldp_igp_sync_if_state state;
|
struct ldp_igp_sync_if_state state;
|
||||||
struct ldp_igp_sync_announce announce;
|
struct ldp_igp_sync_announce announce;
|
||||||
|
struct zapi_opaque_reg_info dst;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
s = zclient->ibuf;
|
s = zclient->ibuf;
|
||||||
@ -2051,6 +2052,13 @@ static int ospf_opaque_msg_handler(ZAPI_CALLBACK_ARGS)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
switch (info.type) {
|
switch (info.type) {
|
||||||
|
case LINK_STATE_SYNC:
|
||||||
|
STREAM_GETC(s, dst.proto);
|
||||||
|
STREAM_GETW(s, dst.instance);
|
||||||
|
STREAM_GETL(s, dst.session_id);
|
||||||
|
dst.type = LINK_STATE_SYNC;
|
||||||
|
ret = ospf_te_sync_ted(dst);
|
||||||
|
break;
|
||||||
case LDP_IGP_SYNC_IF_STATE_UPDATE:
|
case LDP_IGP_SYNC_IF_STATE_UPDATE:
|
||||||
STREAM_GET(&state, s, sizeof(state));
|
STREAM_GET(&state, s, sizeof(state));
|
||||||
ret = ospf_ldp_sync_state_update(state);
|
ret = ospf_ldp_sync_state_update(state);
|
||||||
|
Loading…
Reference in New Issue
Block a user