mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-28 17:44:38 +00:00
Merge pull request #3730 from donaldsharp/send_information
Send information
This commit is contained in:
commit
b8f248ab6f
@ -414,9 +414,6 @@ void zclient_send_reg_requests(struct zclient *zclient, vrf_id_t vrf_id)
|
||||
/* We need router-id information. */
|
||||
zebra_message_send(zclient, ZEBRA_ROUTER_ID_ADD, vrf_id);
|
||||
|
||||
/* We need interface information. */
|
||||
zebra_message_send(zclient, ZEBRA_INTERFACE_ADD, vrf_id);
|
||||
|
||||
/* Set unwanted redistribute route. */
|
||||
for (afi = AFI_IP; afi < AFI_MAX; afi++)
|
||||
vrf_bitmap_set(zclient->redist[afi][zclient->redist_default],
|
||||
@ -481,9 +478,6 @@ void zclient_send_dereg_requests(struct zclient *zclient, vrf_id_t vrf_id)
|
||||
/* We need router-id information. */
|
||||
zebra_message_send(zclient, ZEBRA_ROUTER_ID_DELETE, vrf_id);
|
||||
|
||||
/* We need interface information. */
|
||||
zebra_message_send(zclient, ZEBRA_INTERFACE_DELETE, vrf_id);
|
||||
|
||||
/* Set unwanted redistribute route. */
|
||||
for (afi = AFI_IP; afi < AFI_MAX; afi++)
|
||||
vrf_bitmap_unset(zclient->redist[afi][zclient->redist_default],
|
||||
@ -596,6 +590,8 @@ int zclient_start(struct zclient *zclient)
|
||||
|
||||
zebra_hello_send(zclient);
|
||||
|
||||
zebra_message_send(zclient, ZEBRA_INTERFACE_ADD, VRF_DEFAULT);
|
||||
|
||||
/* Inform the successful connection. */
|
||||
if (zclient->zebra_connected)
|
||||
(*zclient->zebra_connected)(zclient);
|
||||
|
@ -267,6 +267,27 @@ static int pim_zebra_if_state_down(int command, struct zclient *zclient,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pim_zebra_interface_vrf_update(int command, struct zclient *zclient,
|
||||
zebra_size_t length, vrf_id_t vrf_id)
|
||||
{
|
||||
struct interface *ifp;
|
||||
vrf_id_t new_vrf_id;
|
||||
|
||||
ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id,
|
||||
&new_vrf_id);
|
||||
if (!ifp)
|
||||
return 0;
|
||||
|
||||
if (PIM_DEBUG_ZEBRA)
|
||||
zlog_debug("%s: %s updating from %u to %u",
|
||||
__PRETTY_FUNCTION__,
|
||||
ifp->name, vrf_id, new_vrf_id);
|
||||
|
||||
if_update_to_new_vrf(ifp, new_vrf_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef PIM_DEBUG_IFADDR_DUMP
|
||||
static void dump_if_address(struct interface *ifp)
|
||||
{
|
||||
@ -762,6 +783,7 @@ void pim_zebra_init(void)
|
||||
zclient->interface_down = pim_zebra_if_state_down;
|
||||
zclient->interface_address_add = pim_zebra_if_address_add;
|
||||
zclient->interface_address_delete = pim_zebra_if_address_del;
|
||||
zclient->interface_vrf_update = pim_zebra_interface_vrf_update;
|
||||
zclient->nexthop_update = pim_parse_nexthop_update;
|
||||
|
||||
zclient_init(zclient, ZEBRA_ROUTE_PIM, 0, &pimd_privs);
|
||||
|
@ -406,12 +406,11 @@ void zebra_interface_up_update(struct interface *ifp)
|
||||
|
||||
if (ifp->ptm_status || !ifp->ptm_enable) {
|
||||
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode,
|
||||
client))
|
||||
if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) {
|
||||
zsend_interface_update(ZEBRA_INTERFACE_UP,
|
||||
client, ifp);
|
||||
zsend_interface_link_params(client, ifp);
|
||||
}
|
||||
client)) {
|
||||
zsend_interface_update(ZEBRA_INTERFACE_UP,
|
||||
client, ifp);
|
||||
zsend_interface_link_params(client, ifp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -440,12 +439,11 @@ void zebra_interface_add_update(struct interface *ifp)
|
||||
zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s(%u)", ifp->name,
|
||||
ifp->vrf_id);
|
||||
|
||||
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client))
|
||||
if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) {
|
||||
client->ifadd_cnt++;
|
||||
zsend_interface_add(client, ifp);
|
||||
zsend_interface_link_params(client, ifp);
|
||||
}
|
||||
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
|
||||
client->ifadd_cnt++;
|
||||
zsend_interface_add(client, ifp);
|
||||
zsend_interface_link_params(client, ifp);
|
||||
}
|
||||
}
|
||||
|
||||
void zebra_interface_delete_update(struct interface *ifp)
|
||||
@ -814,6 +812,5 @@ void zebra_interface_parameters_update(struct interface *ifp)
|
||||
ifp->name, ifp->vrf_id);
|
||||
|
||||
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client))
|
||||
if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id))
|
||||
zsend_interface_link_params(client, ifp);
|
||||
zsend_interface_link_params(client, ifp);
|
||||
}
|
||||
|
@ -209,12 +209,6 @@ int zsend_interface_link_params(struct zserv *client, struct interface *ifp)
|
||||
{
|
||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
||||
|
||||
/* Check this client need interface information. */
|
||||
if (!vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) {
|
||||
stream_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!ifp->link_params) {
|
||||
stream_free(s);
|
||||
return 0;
|
||||
@ -1317,9 +1311,6 @@ static void zread_interface_add(ZAPI_HANDLER_ARGS)
|
||||
struct vrf *vrf;
|
||||
struct interface *ifp;
|
||||
|
||||
/* Interface information is needed. */
|
||||
vrf_bitmap_set(client->ifinfo, zvrf_id(zvrf));
|
||||
|
||||
RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
|
||||
FOR_ALL_INTERFACES (vrf, ifp) {
|
||||
/* Skip pseudo interface. */
|
||||
@ -1336,7 +1327,6 @@ static void zread_interface_add(ZAPI_HANDLER_ARGS)
|
||||
/* Unregister zebra server interface information. */
|
||||
static void zread_interface_delete(ZAPI_HANDLER_ARGS)
|
||||
{
|
||||
vrf_bitmap_unset(client->ifinfo, zvrf_id(zvrf));
|
||||
}
|
||||
|
||||
void zserv_nexthop_num_warn(const char *caller, const struct prefix *p,
|
||||
@ -1731,7 +1721,6 @@ static void zread_vrf_unregister(ZAPI_HANDLER_ARGS)
|
||||
vrf_bitmap_unset(client->redist[afi][i], zvrf_id(zvrf));
|
||||
vrf_bitmap_unset(client->redist_default[afi], zvrf_id(zvrf));
|
||||
}
|
||||
vrf_bitmap_unset(client->ifinfo, zvrf_id(zvrf));
|
||||
vrf_bitmap_unset(client->ridinfo, zvrf_id(zvrf));
|
||||
}
|
||||
|
||||
|
@ -36,10 +36,6 @@ static int zsend_interface_bfd_update(int cmd, struct zserv *client,
|
||||
int blen;
|
||||
struct stream *s;
|
||||
|
||||
/* Check this client need interface information. */
|
||||
if (!vrf_bitmap_check(client->ifinfo, ifp->vrf_id))
|
||||
return 0;
|
||||
|
||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
||||
|
||||
zclient_create_header(s, cmd, vrf_id);
|
||||
|
@ -626,7 +626,6 @@ static void zserv_client_free(struct zserv *client)
|
||||
|
||||
vrf_bitmap_free(client->redist_default[afi]);
|
||||
}
|
||||
vrf_bitmap_free(client->ifinfo);
|
||||
vrf_bitmap_free(client->ridinfo);
|
||||
|
||||
XFREE(MTYPE_TMP, client);
|
||||
@ -710,7 +709,6 @@ static struct zserv *zserv_client_create(int sock)
|
||||
client->redist[afi][i] = vrf_bitmap_init();
|
||||
client->redist_default[afi] = vrf_bitmap_init();
|
||||
}
|
||||
client->ifinfo = vrf_bitmap_init();
|
||||
client->ridinfo = vrf_bitmap_init();
|
||||
|
||||
/* by default, it's not a synchronous client */
|
||||
|
@ -89,9 +89,6 @@ struct zserv {
|
||||
/* Redistribute default route flag. */
|
||||
vrf_bitmap_t redist_default[AFI_MAX];
|
||||
|
||||
/* Interface information. */
|
||||
vrf_bitmap_t ifinfo;
|
||||
|
||||
/* Router-id information. */
|
||||
vrf_bitmap_t ridinfo;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user