Merge pull request #3730 from donaldsharp/send_information

Send information
This commit is contained in:
Russ White 2019-02-05 10:53:50 -05:00 committed by GitHub
commit b8f248ab6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 35 additions and 40 deletions

View File

@ -414,9 +414,6 @@ void zclient_send_reg_requests(struct zclient *zclient, vrf_id_t vrf_id)
/* We need router-id information. */ /* We need router-id information. */
zebra_message_send(zclient, ZEBRA_ROUTER_ID_ADD, vrf_id); 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. */ /* Set unwanted redistribute route. */
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
vrf_bitmap_set(zclient->redist[afi][zclient->redist_default], 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. */ /* We need router-id information. */
zebra_message_send(zclient, ZEBRA_ROUTER_ID_DELETE, vrf_id); 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. */ /* Set unwanted redistribute route. */
for (afi = AFI_IP; afi < AFI_MAX; afi++) for (afi = AFI_IP; afi < AFI_MAX; afi++)
vrf_bitmap_unset(zclient->redist[afi][zclient->redist_default], vrf_bitmap_unset(zclient->redist[afi][zclient->redist_default],
@ -596,6 +590,8 @@ int zclient_start(struct zclient *zclient)
zebra_hello_send(zclient); zebra_hello_send(zclient);
zebra_message_send(zclient, ZEBRA_INTERFACE_ADD, VRF_DEFAULT);
/* Inform the successful connection. */ /* Inform the successful connection. */
if (zclient->zebra_connected) if (zclient->zebra_connected)
(*zclient->zebra_connected)(zclient); (*zclient->zebra_connected)(zclient);

View File

@ -267,6 +267,27 @@ static int pim_zebra_if_state_down(int command, struct zclient *zclient,
return 0; 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 #ifdef PIM_DEBUG_IFADDR_DUMP
static void dump_if_address(struct interface *ifp) 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_down = pim_zebra_if_state_down;
zclient->interface_address_add = pim_zebra_if_address_add; zclient->interface_address_add = pim_zebra_if_address_add;
zclient->interface_address_delete = pim_zebra_if_address_del; 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->nexthop_update = pim_parse_nexthop_update;
zclient_init(zclient, ZEBRA_ROUTE_PIM, 0, &pimd_privs); zclient_init(zclient, ZEBRA_ROUTE_PIM, 0, &pimd_privs);

View File

@ -406,12 +406,11 @@ void zebra_interface_up_update(struct interface *ifp)
if (ifp->ptm_status || !ifp->ptm_enable) { if (ifp->ptm_status || !ifp->ptm_enable) {
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode,
client)) client)) {
if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) { zsend_interface_update(ZEBRA_INTERFACE_UP,
zsend_interface_update(ZEBRA_INTERFACE_UP, client, ifp);
client, ifp); zsend_interface_link_params(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, zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s(%u)", ifp->name,
ifp->vrf_id); ifp->vrf_id);
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) {
if (vrf_bitmap_check(client->ifinfo, ifp->vrf_id)) { client->ifadd_cnt++;
client->ifadd_cnt++; zsend_interface_add(client, ifp);
zsend_interface_add(client, ifp); zsend_interface_link_params(client, ifp);
zsend_interface_link_params(client, ifp); }
}
} }
void zebra_interface_delete_update(struct interface *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); ifp->name, ifp->vrf_id);
for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) 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);
} }

View File

@ -209,12 +209,6 @@ int zsend_interface_link_params(struct zserv *client, struct interface *ifp)
{ {
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); 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) { if (!ifp->link_params) {
stream_free(s); stream_free(s);
return 0; return 0;
@ -1317,9 +1311,6 @@ static void zread_interface_add(ZAPI_HANDLER_ARGS)
struct vrf *vrf; struct vrf *vrf;
struct interface *ifp; struct interface *ifp;
/* Interface information is needed. */
vrf_bitmap_set(client->ifinfo, zvrf_id(zvrf));
RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
FOR_ALL_INTERFACES (vrf, ifp) { FOR_ALL_INTERFACES (vrf, ifp) {
/* Skip pseudo interface. */ /* Skip pseudo interface. */
@ -1336,7 +1327,6 @@ static void zread_interface_add(ZAPI_HANDLER_ARGS)
/* Unregister zebra server interface information. */ /* Unregister zebra server interface information. */
static void zread_interface_delete(ZAPI_HANDLER_ARGS) 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, 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[afi][i], zvrf_id(zvrf));
vrf_bitmap_unset(client->redist_default[afi], 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)); vrf_bitmap_unset(client->ridinfo, zvrf_id(zvrf));
} }

View File

@ -36,10 +36,6 @@ static int zsend_interface_bfd_update(int cmd, struct zserv *client,
int blen; int blen;
struct stream *s; 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); s = stream_new(ZEBRA_MAX_PACKET_SIZ);
zclient_create_header(s, cmd, vrf_id); zclient_create_header(s, cmd, vrf_id);

View File

@ -626,7 +626,6 @@ static void zserv_client_free(struct zserv *client)
vrf_bitmap_free(client->redist_default[afi]); vrf_bitmap_free(client->redist_default[afi]);
} }
vrf_bitmap_free(client->ifinfo);
vrf_bitmap_free(client->ridinfo); vrf_bitmap_free(client->ridinfo);
XFREE(MTYPE_TMP, client); 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[afi][i] = vrf_bitmap_init();
client->redist_default[afi] = vrf_bitmap_init(); client->redist_default[afi] = vrf_bitmap_init();
} }
client->ifinfo = vrf_bitmap_init();
client->ridinfo = vrf_bitmap_init(); client->ridinfo = vrf_bitmap_init();
/* by default, it's not a synchronous client */ /* by default, it's not a synchronous client */

View File

@ -89,9 +89,6 @@ struct zserv {
/* Redistribute default route flag. */ /* Redistribute default route flag. */
vrf_bitmap_t redist_default[AFI_MAX]; vrf_bitmap_t redist_default[AFI_MAX];
/* Interface information. */
vrf_bitmap_t ifinfo;
/* Router-id information. */ /* Router-id information. */
vrf_bitmap_t ridinfo; vrf_bitmap_t ridinfo;