Merge remote-tracking branch 'origin/cmaster' into cmaster-next

This commit is contained in:
Donald Sharp 2016-07-12 20:24:00 -04:00
commit 275382273b
14 changed files with 61 additions and 27 deletions

View File

@ -711,7 +711,4 @@ bgp_bfd_init(void)
install_element (BGP_NODE, &no_neighbor_bfd_cmd);
install_element (BGP_NODE, &no_neighbor_bfd_val_cmd);
install_element (BGP_NODE, &no_neighbor_bfd_type_cmd);
/* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
}

View File

@ -32,6 +32,7 @@ Boston, MA 02111-1307, USA. */
#include "queue.h"
#include "memory.h"
#include "lib/json.h"
#include "lib/bfd.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_route.h"
@ -43,7 +44,6 @@ Boston, MA 02111-1307, USA. */
#include "bgpd/bgp_mpath.h"
#include "bgpd/bgp_nexthop.h"
#include "bgpd/bgp_nht.h"
#include "bgpd/bgp_bfd.h"
/* All information about zebra. */
struct zclient *zclient = NULL;
@ -2057,6 +2057,9 @@ bgp_zebra_connected (struct zclient *zclient)
bgp_zebra_instance_register (bgp);
/* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
/* TODO - What if we have peers and networks configured, do we have to
* kick-start them?
*/

View File

@ -6630,9 +6630,17 @@ bgp_config_write_peer_af (struct vty *vty, struct bgp *bgp,
{
if (peer->afc[afi][safi])
{
afi_header_vty_out (vty, afi, safi, write,
" neighbor %s activate%s",
addr, VTY_NEWLINE);
if ((afi == AFI_IP) && (safi == SAFI_UNICAST))
{
if (bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4))
{
vty_out (vty, " neighbor %s activate%s", addr, VTY_NEWLINE);
}
}
else
afi_header_vty_out (vty, afi, safi, write,
" neighbor %s activate%s",
addr, VTY_NEWLINE);
}
}

View File

@ -329,6 +329,12 @@ if test $ac_cv_lib_json_c_json_object_get = no; then
AC_MSG_ERROR([lib json is needed to compile])
fi
AC_CHECK_HEADERS(json-c/json.h)
AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
if test $ac_cv_lib_json_c_json_object_get = no; then
AC_MSG_ERROR([lib json is needed to compile])
fi
if test x"${enable_gcc_rdynamic}" != x"no" ; then
if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
LDFLAGS="${LDFLAGS} -rdynamic"

2
debian/rules vendored
View File

@ -39,6 +39,8 @@ override_dh_auto_configure:
--sysconfdir=/etc/quagga \
$(USE_SNMP) \
--enable-ospfapi=yes \
--enable-vtysh=yes \
--enable-isisd=yes \
--enable-multipath=256 \
--enable-user=quagga \
--enable-group=quagga \

View File

@ -420,7 +420,4 @@ ospf6_bfd_init(void)
install_element (INTERFACE_NODE, &ipv6_ospf6_bfd_cmd);
install_element (INTERFACE_NODE, &ipv6_ospf6_bfd_param_cmd);
install_element (INTERFACE_NODE, &no_ipv6_ospf6_bfd_cmd);
/* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
}

View File

@ -28,6 +28,7 @@
#include "stream.h"
#include "zclient.h"
#include "memory.h"
#include "lib/bfd.h"
#include "ospf6_proto.h"
#include "ospf6_top.h"
@ -656,6 +657,9 @@ DEFUN (no_redistribute_ospf6,
static void
ospf6_zebra_connected (struct zclient *zclient)
{
/* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
zclient_send_reg_requests (zclient, VRF_DEFAULT);
}

View File

@ -452,7 +452,4 @@ ospf_bfd_init(void)
install_element (INTERFACE_NODE, &ip_ospf_bfd_param_cmd);
install_element (INTERFACE_NODE, &no_ip_ospf_bfd_cmd);
install_element (INTERFACE_NODE, &no_ip_ospf_bfd_param_cmd);
/* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
}

View File

@ -34,6 +34,7 @@
#include "filter.h"
#include "plist.h"
#include "log.h"
#include "lib/bfd.h"
#include "ospfd/ospfd.h"
#include "ospfd/ospf_interface.h"
@ -1558,6 +1559,9 @@ ospf_distance_apply (struct prefix_ipv4 *p, struct ospf_route *or)
static void
ospf_zebra_connected (struct zclient *zclient)
{
/* Send the client registration */
bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER);
zclient_send_reg_requests (zclient, VRF_DEFAULT);
}

View File

@ -71,7 +71,6 @@
%define daemon_list zebra ripd ospfd bgpd isisd pimd ripngd ospfd6d
%if %{with_watchquagga}
%define daemon_watchquagga watchquagga
%else
@ -220,6 +219,7 @@ developing OSPF-API and quagga applications.
--disable-watchquagga \
%endif
--enable-gcc-rdynamic \
--enable-isisd=yes \
--enable-systemd=yes \
--enable-poll=yes

View File

@ -624,13 +624,14 @@ if __name__ == '__main__':
group.add_argument('--reload', action='store_true', help='Apply the deltas', default=False)
group.add_argument('--test', action='store_true', help='Show the deltas', default=False)
parser.add_argument('--debug', action='store_true', help='Enable debugs', default=False)
parser.add_argument('--stdout', action='store_true', help='Log to STDOUT', default=False)
parser.add_argument('filename', help='Location of new quagga config file')
args = parser.parse_args()
# Logging
# For --test log to stdout
# For --reload log to /var/log/quagga/quagga-reload.log
if args.test:
if args.test or args.stdout:
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(levelname)5s: %(message)s')
elif args.reload:

View File

@ -131,11 +131,13 @@ zebra_ptm_init (void)
void
zebra_ptm_finish(void)
{
if (ptm_cb.ptm_sock != -1)
close(ptm_cb.ptm_sock);
int proto;
if (ptm_cb.wb)
buffer_free(ptm_cb.wb);
for (proto = 0; proto < ZEBRA_ROUTE_MAX; proto++)
if (CHECK_FLAG(ptm_cb.client_flags[proto], ZEBRA_PTM_BFD_CLIENT_FLAG_REG))
zebra_ptm_bfd_client_deregister(proto);
buffer_flush_all(ptm_cb.wb, ptm_cb.ptm_sock);
if (ptm_cb.out_data)
free(ptm_cb.out_data);
@ -150,6 +152,12 @@ zebra_ptm_finish(void)
thread_cancel (ptm_cb.t_write);
if (ptm_cb.t_timer)
thread_cancel (ptm_cb.t_timer);
if (ptm_cb.wb)
buffer_free(ptm_cb.wb);
if (ptm_cb.ptm_sock != -1)
close(ptm_cb.ptm_sock);
}
static int
@ -999,24 +1007,26 @@ zebra_ptm_bfd_client_register (struct zserv *client, int sock, u_short length)
zlog_debug ("%s: Sent message (%d) %s", __func__, data_len,
ptm_cb.out_data);
zebra_ptm_send_message(ptm_cb.out_data, data_len);
SET_FLAG(ptm_cb.client_flags[client->proto], ZEBRA_PTM_BFD_CLIENT_FLAG_REG);
return 0;
}
/* BFD client deregister */
void
zebra_ptm_bfd_client_deregister (struct zserv *client)
zebra_ptm_bfd_client_deregister (int proto)
{
void *out_ctxt;
char tmp_buf[64];
int data_len = ZEBRA_PTM_SEND_MAX_SOCKBUF;
if (client->proto != ZEBRA_ROUTE_OSPF && client->proto != ZEBRA_ROUTE_BGP
&& client->proto != ZEBRA_ROUTE_OSPF6)
if (proto != ZEBRA_ROUTE_OSPF && proto != ZEBRA_ROUTE_BGP
&& proto != ZEBRA_ROUTE_OSPF6)
return;
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("bfd_client_deregister msg for client %s",
zebra_route_string(client->proto));
zlog_err("bfd_client_deregister msg for client %s",
zebra_route_string(proto));
if (ptm_cb.ptm_sock == -1)
{
@ -1030,7 +1040,7 @@ zebra_ptm_bfd_client_deregister (struct zserv *client)
sprintf(tmp_buf, "%s", ZEBRA_PTM_BFD_CLIENT_DEREG_CMD);
ptm_lib_append_msg(ptm_hdl, out_ctxt, ZEBRA_PTM_CMD_STR, tmp_buf);
sprintf(tmp_buf, "%s", zebra_route_string(client->proto));
sprintf(tmp_buf, "%s", zebra_route_string(proto));
ptm_lib_append_msg(ptm_hdl, out_ctxt, ZEBRA_PTM_BFD_CLIENT_FIELD,
tmp_buf);
@ -1039,7 +1049,9 @@ zebra_ptm_bfd_client_deregister (struct zserv *client)
if (IS_ZEBRA_DEBUG_SEND)
zlog_debug ("%s: Sent message (%d) %s", __func__, data_len,
ptm_cb.out_data);
zebra_ptm_send_message(ptm_cb.out_data, data_len);
UNSET_FLAG(ptm_cb.client_flags[proto], ZEBRA_PTM_BFD_CLIENT_FLAG_REG);
}
int

View File

@ -27,6 +27,8 @@ extern const char ZEBRA_PTM_SOCK_NAME[];
#define ZEBRA_PTM_MAX_SOCKBUF 3200 /* 25B *128 ports */
#define ZEBRA_PTM_SEND_MAX_SOCKBUF 512
#define ZEBRA_PTM_BFD_CLIENT_FLAG_REG (1 << 1) /* client registered with BFD */
/* Zebra ptm context block */
struct zebra_ptm_cb
{
@ -44,6 +46,7 @@ struct zebra_ptm_cb
int ptm_enable;
int pid;
u_int8_t client_flags[ZEBRA_ROUTE_MAX];
};
#define ZEBRA_PTM_STATUS_DOWN 0
@ -72,5 +75,5 @@ int zebra_ptm_bfd_client_register (struct zserv *client, int sock,
void zebra_ptm_if_init(struct zebra_if *zebra_ifp);
void zebra_ptm_if_set_ptm_state(struct interface *ifp, struct zebra_if *zebra_ifp);
void zebra_ptm_if_write (struct vty *vty, struct zebra_if *zebra_ifp);
void zebra_ptm_bfd_client_deregister (struct zserv *client);
void zebra_ptm_bfd_client_deregister (int proto);
#endif

View File

@ -1832,7 +1832,7 @@ static void
zebra_client_close (struct zserv *client)
{
/* Send client de-registration to BFD */
zebra_ptm_bfd_client_deregister(client);
zebra_ptm_bfd_client_deregister(client->proto);
/* Cleanup any registered nexthops - across all VRFs. */
zebra_client_close_cleanup_rnh (client);