diff options
Diffstat (limited to 'pimd')
| -rw-r--r-- | pimd/.gitignore | 14 | ||||
| -rw-r--r-- | pimd/mtracebis.c | 4 | ||||
| -rw-r--r-- | pimd/mtracebis_netlink.c | 12 | ||||
| -rw-r--r-- | pimd/mtracebis_routeget.c | 4 | ||||
| -rw-r--r-- | pimd/pim_cmd.c | 165 | ||||
| -rw-r--r-- | pimd/pim_errors.c | 4 | ||||
| -rw-r--r-- | pimd/pim_errors.h | 4 | ||||
| -rw-r--r-- | pimd/pim_iface.c | 16 | ||||
| -rw-r--r-- | pimd/pim_iface.h | 5 | ||||
| -rw-r--r-- | pimd/pim_ifchannel.c | 3 | ||||
| -rw-r--r-- | pimd/pim_igmp.c | 4 | ||||
| -rw-r--r-- | pimd/pim_igmp_mtrace.c | 2 | ||||
| -rw-r--r-- | pimd/pim_igmp_stats.c | 4 | ||||
| -rw-r--r-- | pimd/pim_igmpv3.c | 2 | ||||
| -rw-r--r-- | pimd/pim_mroute.c | 26 | ||||
| -rw-r--r-- | pimd/pim_msdp.c | 2 | ||||
| -rw-r--r-- | pimd/pim_msdp_packet.c | 8 | ||||
| -rw-r--r-- | pimd/pim_msdp_socket.c | 43 | ||||
| -rw-r--r-- | pimd/pim_neighbor.c | 2 | ||||
| -rw-r--r-- | pimd/pim_pim.c | 8 | ||||
| -rw-r--r-- | pimd/pim_rp.c | 11 | ||||
| -rw-r--r-- | pimd/pim_rp.h | 2 | ||||
| -rw-r--r-- | pimd/pim_sock.c | 4 | ||||
| -rw-r--r-- | pimd/pim_ssm.c | 6 | ||||
| -rw-r--r-- | pimd/pim_ssmpingd.c | 4 | ||||
| -rw-r--r-- | pimd/pim_time.c | 8 | ||||
| -rw-r--r-- | pimd/pim_upstream.c | 11 | ||||
| -rw-r--r-- | pimd/pim_vty.c | 2 | ||||
| -rw-r--r-- | pimd/pim_zebra.c | 11 | ||||
| -rw-r--r-- | pimd/pim_zlookup.c | 30 | ||||
| -rw-r--r-- | pimd/pimd.c | 2 | ||||
| -rw-r--r-- | pimd/subdir.am | 3 |
32 files changed, 229 insertions, 197 deletions
diff --git a/pimd/.gitignore b/pimd/.gitignore index 1f56cfaecd..b1780df758 100644 --- a/pimd/.gitignore +++ b/pimd/.gitignore @@ -1,17 +1,3 @@ -!Makefile -Makefile.in -libpim.a pimd mtracebis test_igmpv3_join -tags -TAGS -.deps -*.o -*.lo -*.la -*.libs -.arch-inventory -.arch-ids -*~ -*.loT diff --git a/pimd/mtracebis.c b/pimd/mtracebis.c index c0d95aeed9..65c495eff0 100644 --- a/pimd/mtracebis.c +++ b/pimd/mtracebis.c @@ -17,6 +17,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifdef __linux__ #include "pim_igmp_mtrace.h" diff --git a/pimd/mtracebis_netlink.c b/pimd/mtracebis_netlink.c index b4bf6bada3..47b5f7e52c 100644 --- a/pimd/mtracebis_netlink.c +++ b/pimd/mtracebis_netlink.c @@ -10,6 +10,10 @@ * */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifdef __linux__ #include <stdio.h> @@ -239,7 +243,7 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth, break; /* process next filter */ } if (h->nlmsg_type == NLMSG_ERROR) { - struct nlmsgerr *err = + struct nlmsgerr *merr = (struct nlmsgerr *)NLMSG_DATA( h); if (h->nlmsg_len @@ -248,7 +252,7 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth, fprintf(stderr, "ERROR truncated\n"); } else { - errno = -err->error; + errno = -merr->error; perror("RTNETLINK answers"); } return -1; @@ -375,12 +379,12 @@ int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer, } if (h->nlmsg_type == NLMSG_ERROR) { - struct nlmsgerr *err = + struct nlmsgerr *merr = (struct nlmsgerr *)NLMSG_DATA(h); if (l < (int)sizeof(struct nlmsgerr)) { fprintf(stderr, "ERROR truncated\n"); } else { - errno = -err->error; + errno = -merr->error; if (errno == 0) { if (answer) memcpy(answer, h, diff --git a/pimd/mtracebis_routeget.c b/pimd/mtracebis_routeget.c index 8c1cd8d963..8d974403ac 100644 --- a/pimd/mtracebis_routeget.c +++ b/pimd/mtracebis_routeget.c @@ -17,6 +17,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifdef __linux__ #include <asm/types.h> diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 918eaf2fdb..26932eea20 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -432,7 +432,7 @@ static void pim_show_membership_helper(struct vty *vty, json_object_object_add(json_iface, ch_grp_str, json_row); } static void pim_show_membership(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct pim_interface *pim_ifp; struct pim_ifchannel *ch; @@ -549,7 +549,7 @@ static void pim_print_ifp_flags(struct vty *vty, struct interface *ifp, } static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct interface *ifp; time_t now; @@ -634,7 +634,7 @@ static void igmp_show_interfaces(struct pim_instance *pim, struct vty *vty, static void igmp_show_interfaces_single(struct pim_instance *pim, struct vty *vty, const char *ifname, - uint8_t uj) + bool uj) { struct igmp_sock *igmp; struct interface *ifp; @@ -894,7 +894,7 @@ static void igmp_show_interface_join(struct pim_instance *pim, struct vty *vty) static void pim_show_interfaces_single(struct pim_instance *pim, struct vty *vty, const char *ifname, - uint8_t uj) + bool uj) { struct in_addr ifaddr; struct interface *ifp; @@ -1187,8 +1187,9 @@ static void pim_show_interfaces_single(struct pim_instance *pim, vty_out(vty, "Designated Router\n"); vty_out(vty, "-----------------\n"); vty_out(vty, "Address : %s\n", dr_str); - vty_out(vty, "Priority : %d\n", - pim_ifp->pim_dr_priority); + vty_out(vty, "Priority : %d(%d)\n", + pim_ifp->pim_dr_priority, + pim_ifp->pim_dr_num_nondrpri_neighbors); vty_out(vty, "Uptime : %s\n", dr_uptime); vty_out(vty, "Elections : %d\n", pim_ifp->pim_dr_election_count); @@ -1295,7 +1296,7 @@ static void pim_show_interfaces_single(struct pim_instance *pim, } static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, - const char *ifname, uint8_t uj) + const char *ifname, bool uj) { struct interface *ifp; struct igmp_stats rx_stats; @@ -1365,7 +1366,7 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, } static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct interface *ifp; struct listnode *upnode; @@ -1458,7 +1459,7 @@ static void pim_show_interfaces(struct pim_instance *pim, struct vty *vty, } static void pim_show_interface_traffic(struct pim_instance *pim, - struct vty *vty, uint8_t uj) + struct vty *vty, bool uj) { struct interface *ifp = NULL; struct pim_interface *pim_ifp = NULL; @@ -1538,7 +1539,7 @@ static void pim_show_interface_traffic(struct pim_instance *pim, static void pim_show_interface_traffic_single(struct pim_instance *pim, struct vty *vty, - const char *ifname, uint8_t uj) + const char *ifname, bool uj) { struct interface *ifp = NULL; struct pim_interface *pim_ifp = NULL; @@ -1627,7 +1628,7 @@ static void pim_show_interface_traffic_single(struct pim_instance *pim, static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch, json_object *json, - time_t now, uint8_t uj) + time_t now, bool uj) { char ch_src_str[INET_ADDRSTRLEN]; char ch_grp_str[INET_ADDRSTRLEN]; @@ -1690,7 +1691,7 @@ static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp, } } -static void pim_show_join(struct pim_instance *pim, struct vty *vty, uint8_t uj) +static void pim_show_join(struct pim_instance *pim, struct vty *vty, bool uj) { struct pim_interface *pim_ifp; struct pim_ifchannel *ch; @@ -1724,7 +1725,7 @@ static void pim_show_join(struct pim_instance *pim, struct vty *vty, uint8_t uj) } static void pim_show_neighbors_single(struct pim_instance *pim, struct vty *vty, - const char *neighbor, uint8_t uj) + const char *neighbor, bool uj) { struct listnode *neighnode; struct interface *ifp; @@ -1933,8 +1934,7 @@ static void pim_show_neighbors_single(struct pim_instance *pim, struct vty *vty, } static void pim_show_state(struct pim_instance *pim, struct vty *vty, - const char *src_or_group, const char *group, - uint8_t uj) + const char *src_or_group, const char *group, bool uj) { struct channel_oil *c_oil; struct listnode *node; @@ -2135,7 +2135,7 @@ static void pim_show_state(struct pim_instance *pim, struct vty *vty, } static void pim_show_neighbors(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct listnode *neighnode; struct interface *ifp; @@ -2331,7 +2331,7 @@ static const char *pim_reg_state2brief_str(enum pim_reg_state reg_state, } static void pim_show_upstream(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct listnode *upnode; struct pim_upstream *up; @@ -2476,7 +2476,7 @@ static void pim_show_join_desired_helper(struct pim_instance *pim, struct vty *vty, struct pim_interface *pim_ifp, struct pim_ifchannel *ch, - json_object *json, uint8_t uj) + json_object *json, bool uj) { struct pim_upstream *up = ch->upstream; json_object *json_group = NULL; @@ -2532,7 +2532,7 @@ static void pim_show_join_desired_helper(struct pim_instance *pim, } static void pim_show_join_desired(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct pim_interface *pim_ifp; struct pim_ifchannel *ch; @@ -2568,7 +2568,7 @@ static void pim_show_join_desired(struct pim_instance *pim, struct vty *vty, } static void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct listnode *upnode; struct pim_upstream *up; @@ -2701,7 +2701,7 @@ static void show_scan_oil_stats(struct pim_instance *pim, struct vty *vty, uptime_mroute_del, (long long)pim->mroute_del_events); } -static void pim_show_rpf(struct pim_instance *pim, struct vty *vty, uint8_t uj) +static void pim_show_rpf(struct pim_instance *pim, struct vty *vty, bool uj) { struct listnode *up_node; struct pim_upstream *up; @@ -2821,8 +2821,7 @@ static void pim_show_nexthop(struct pim_instance *pim, struct vty *vty) hash_walk(pim->rpf_hash, pim_print_pnc_cache_walkcb, &cwd); } -static void igmp_show_groups(struct pim_instance *pim, struct vty *vty, - uint8_t uj) +static void igmp_show_groups(struct pim_instance *pim, struct vty *vty, bool uj) { struct interface *ifp; time_t now; @@ -4496,7 +4495,7 @@ DEFUN (show_ip_multicast_vrf_all, } static void show_mroute(struct pim_instance *pim, struct vty *vty, bool fill, - uint8_t uj) + bool uj) { struct listnode *node; struct channel_oil *c_oil; @@ -5549,7 +5548,7 @@ DEFUN (no_ip_pim_ssm_prefix_list_name, } static void ip_pim_ssm_show_group_range(struct pim_instance *pim, - struct vty *vty, uint8_t uj) + struct vty *vty, bool uj) { struct pim_ssm *ssm = pim->ssm_info; const char *range_str = @@ -5589,7 +5588,7 @@ DEFUN (show_ip_pim_ssm_range, } static void ip_pim_ssm_show_group_type(struct pim_instance *pim, - struct vty *vty, uint8_t uj, + struct vty *vty, bool uj, const char *group) { struct in_addr group_addr; @@ -5642,27 +5641,6 @@ DEFUN (show_ip_pim_group_type, return CMD_SUCCESS; } -DEFUN_HIDDEN (ip_multicast_routing, - ip_multicast_routing_cmd, - "ip multicast-routing", - IP_STR - "Enable IP multicast forwarding\n") -{ - return CMD_SUCCESS; -} - -DEFUN_HIDDEN (no_ip_multicast_routing, - no_ip_multicast_routing_cmd, - "no ip multicast-routing", - NO_STR - IP_STR - "Enable IP multicast forwarding\n") -{ - vty_out(vty, - "Command is Disabled and will be removed in a future version\n"); - return CMD_SUCCESS; -} - DEFUN (ip_ssmpingd, ip_ssmpingd_cmd, "ip ssmpingd [A.B.C.D]", @@ -5789,7 +5767,7 @@ static int pim_cmd_igmp_start(struct vty *vty, struct interface *ifp) pim_ifp = ifp->info; if (!pim_ifp) { - pim_ifp = pim_if_new(ifp, 1 /* igmp=true */, 0 /* pim=false */); + pim_ifp = pim_if_new(ifp, true, false, false); if (!pim_ifp) { vty_out(vty, "Could not enable IGMP on interface %s\n", ifp->name); @@ -6400,7 +6378,7 @@ static int pim_cmd_interface_add(struct interface *ifp) struct pim_interface *pim_ifp = ifp->info; if (!pim_ifp) { - pim_ifp = pim_if_new(ifp, 0 /* igmp=false */, 1 /* pim=true */); + pim_ifp = pim_if_new(ifp, false, true, false); if (!pim_ifp) { return 0; } @@ -6433,16 +6411,12 @@ DEFUN_HIDDEN (interface_ip_pim_ssm, return CMD_SUCCESS; } -DEFUN (interface_ip_pim_sm, - interface_ip_pim_sm_cmd, - "ip pim sm", - IP_STR - PIM_STR - IFACE_PIM_SM_STR) +static int interface_ip_pim_helper(struct vty *vty) { struct pim_interface *pim_ifp; VTY_DECLVAR_CONTEXT(interface, ifp); + if (!pim_cmd_interface_add(ifp)) { vty_out(vty, "Could not enable PIM SM on interface\n"); return CMD_WARNING_CONFIG_FAILED; @@ -6455,6 +6429,25 @@ DEFUN (interface_ip_pim_sm, return CMD_SUCCESS; } +DEFUN_HIDDEN (interface_ip_pim_sm, + interface_ip_pim_sm_cmd, + "ip pim sm", + IP_STR + PIM_STR + IFACE_PIM_SM_STR) +{ + return interface_ip_pim_helper(vty); +} + +DEFUN (interface_ip_pim, + interface_ip_pim_cmd, + "ip pim", + IP_STR + PIM_STR) +{ + return interface_ip_pim_helper(vty); +} + static int pim_cmd_interface_delete(struct interface *ifp) { struct pim_interface *pim_ifp = ifp->info; @@ -6480,13 +6473,7 @@ static int pim_cmd_interface_delete(struct interface *ifp) return 1; } -DEFUN_HIDDEN (interface_no_ip_pim_ssm, - interface_no_ip_pim_ssm_cmd, - "no ip pim ssm", - NO_STR - IP_STR - PIM_STR - IFACE_PIM_STR) +static int interface_no_ip_pim_helper(struct vty *vty) { VTY_DECLVAR_CONTEXT(interface, ifp); if (!pim_cmd_interface_delete(ifp)) { @@ -6497,7 +6484,18 @@ DEFUN_HIDDEN (interface_no_ip_pim_ssm, return CMD_SUCCESS; } -DEFUN (interface_no_ip_pim_sm, +DEFUN_HIDDEN (interface_no_ip_pim_ssm, + interface_no_ip_pim_ssm_cmd, + "no ip pim ssm", + NO_STR + IP_STR + PIM_STR + IFACE_PIM_STR) +{ + return interface_no_ip_pim_helper(vty); +} + +DEFUN_HIDDEN (interface_no_ip_pim_sm, interface_no_ip_pim_sm_cmd, "no ip pim sm", NO_STR @@ -6505,13 +6503,17 @@ DEFUN (interface_no_ip_pim_sm, PIM_STR IFACE_PIM_SM_STR) { - VTY_DECLVAR_CONTEXT(interface, ifp); - if (!pim_cmd_interface_delete(ifp)) { - vty_out(vty, "Unable to delete interface information\n"); - return CMD_WARNING_CONFIG_FAILED; - } + return interface_no_ip_pim_helper(vty); +} - return CMD_SUCCESS; +DEFUN (interface_no_ip_pim, + interface_no_ip_pim_cmd, + "no ip pim", + NO_STR + IP_STR + PIM_STR) +{ + return interface_no_ip_pim_helper(vty); } /* boundaries */ @@ -7468,7 +7470,7 @@ DEFUN (interface_pim_use_source, interface_pim_use_source_cmd, "ip pim use-source A.B.C.D", IP_STR - "pim multicast routing\n" + PIM_STR "Configure primary IP address\n" "source ip address\n") { @@ -7480,7 +7482,7 @@ DEFUN (interface_no_pim_use_source, "no ip pim use-source [A.B.C.D]", NO_STR IP_STR - "pim multicast routing\n" + PIM_STR "Delete source IP address\n" "source ip address\n") { @@ -7908,7 +7910,7 @@ static void print_empty_json_obj(struct vty *vty) } static void ip_msdp_show_mesh_group(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct listnode *mbrnode; struct pim_msdp_mg_mbr *mbr; @@ -8030,7 +8032,7 @@ DEFUN (show_ip_msdp_mesh_group_vrf_all, } static void ip_msdp_show_peers(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct listnode *mpnode; struct pim_msdp_peer *mp; @@ -8084,7 +8086,7 @@ static void ip_msdp_show_peers(struct pim_instance *pim, struct vty *vty, } static void ip_msdp_show_peers_detail(struct pim_instance *pim, struct vty *vty, - const char *peer, uint8_t uj) + const char *peer, bool uj) { struct listnode *mpnode; struct pim_msdp_peer *mp; @@ -8262,8 +8264,7 @@ DEFUN (show_ip_msdp_peer_detail_vrf_all, return CMD_SUCCESS; } -static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, - uint8_t uj) +static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, bool uj) { struct listnode *sanode; struct pim_msdp_sa *sa; @@ -8340,7 +8341,7 @@ static void ip_msdp_show_sa(struct pim_instance *pim, struct vty *vty, static void ip_msdp_show_sa_entry_detail(struct pim_msdp_sa *sa, const char *src_str, const char *grp_str, struct vty *vty, - uint8_t uj, json_object *json) + bool uj, json_object *json) { char rp_str[INET_ADDRSTRLEN]; char peer_str[INET_ADDRSTRLEN]; @@ -8404,7 +8405,7 @@ static void ip_msdp_show_sa_entry_detail(struct pim_msdp_sa *sa, } static void ip_msdp_show_sa_detail(struct pim_instance *pim, struct vty *vty, - uint8_t uj) + bool uj) { struct listnode *sanode; struct pim_msdp_sa *sa; @@ -8487,7 +8488,7 @@ DEFUN (show_ip_msdp_sa_detail_vrf_all, } static void ip_msdp_show_sa_addr(struct pim_instance *pim, struct vty *vty, - const char *addr, uint8_t uj) + const char *addr, bool uj) { struct listnode *sanode; struct pim_msdp_sa *sa; @@ -8516,7 +8517,7 @@ static void ip_msdp_show_sa_addr(struct pim_instance *pim, struct vty *vty, } static void ip_msdp_show_sa_sg(struct pim_instance *pim, struct vty *vty, - const char *src, const char *grp, uint8_t uj) + const char *src, const char *grp, bool uj) { struct listnode *sanode; struct pim_msdp_sa *sa; @@ -8637,8 +8638,6 @@ void pim_cmd_init(void) install_node(&debug_node, pim_debug_config_write); - install_element(CONFIG_NODE, &ip_multicast_routing_cmd); - install_element(CONFIG_NODE, &no_ip_multicast_routing_cmd); install_element(CONFIG_NODE, &ip_pim_rp_cmd); install_element(VRF_NODE, &ip_pim_rp_cmd); install_element(CONFIG_NODE, &no_ip_pim_rp_cmd); @@ -8724,6 +8723,8 @@ void pim_cmd_init(void) install_element(INTERFACE_NODE, &interface_no_ip_pim_ssm_cmd); install_element(INTERFACE_NODE, &interface_ip_pim_sm_cmd); install_element(INTERFACE_NODE, &interface_no_ip_pim_sm_cmd); + install_element(INTERFACE_NODE, &interface_ip_pim_cmd); + install_element(INTERFACE_NODE, &interface_no_ip_pim_cmd); install_element(INTERFACE_NODE, &interface_ip_pim_drprio_cmd); install_element(INTERFACE_NODE, &interface_no_ip_pim_drprio_cmd); install_element(INTERFACE_NODE, &interface_ip_pim_hello_cmd); diff --git a/pimd/pim_errors.c b/pimd/pim_errors.c index d154752bdc..0674a4e994 100644 --- a/pimd/pim_errors.c +++ b/pimd/pim_errors.c @@ -26,13 +26,13 @@ /* clang-format off */ static struct log_ref ferr_pim_err[] = { { - .code = PIM_ERR_MSDP_PACKET, + .code = EC_PIM_MSDP_PACKET, .title = "PIM MSDP Packet Error", .description = "PIM has received a packet from a peer that does not correctly decode", .suggestion = "Check MSDP peer and ensure it is correctly working" }, { - .code = PIM_ERR_CONFIG, + .code = EC_PIM_CONFIG, .title = "PIM Configuration Error", .description = "PIM has detected a configuration error", .suggestion = "Ensure the configuration is correct and apply correct configuration" diff --git a/pimd/pim_errors.h b/pimd/pim_errors.h index ad9c95a93d..d73caa3f8f 100644 --- a/pimd/pim_errors.h +++ b/pimd/pim_errors.h @@ -24,8 +24,8 @@ #include "lib/ferr.h" enum pim_log_refs { - PIM_ERR_MSDP_PACKET = PIM_FERR_START, - PIM_ERR_CONFIG, + EC_PIM_MSDP_PACKET = PIM_FERR_START, + EC_PIM_CONFIG, }; extern void pim_error_init(void); diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 72ccf3ab1e..249b24c0d7 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -108,7 +108,8 @@ static int pim_sec_addr_comp(const void *p1, const void *p2) return 0; } -struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim) +struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim, + bool ispimreg) { struct pim_interface *pim_ifp; @@ -175,7 +176,7 @@ struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim) pim_sock_reset(ifp); - pim_if_add_vif(ifp); + pim_if_add_vif(ifp, ispimreg); return pim_ifp; } @@ -626,7 +627,7 @@ void pim_if_addr_add(struct connected *ifc) address assigned, then try to create a vif_index. */ if (pim_ifp->mroute_vif_index < 0) { - pim_if_add_vif(ifp); + pim_if_add_vif(ifp, false); } pim_ifchannel_scan_forward_start(ifp); } @@ -759,7 +760,7 @@ void pim_if_addr_add_all(struct interface *ifp) * address assigned, then try to create a vif_index. */ if (pim_ifp->mroute_vif_index < 0) { - pim_if_add_vif(ifp); + pim_if_add_vif(ifp, false); } pim_ifchannel_scan_forward_start(ifp); @@ -924,7 +925,7 @@ static int pim_iface_next_vif_index(struct interface *ifp) see also pim_if_find_vifindex_by_ifindex() */ -int pim_if_add_vif(struct interface *ifp) +int pim_if_add_vif(struct interface *ifp, bool ispimreg) { struct pim_interface *pim_ifp = ifp->info; struct in_addr ifaddr; @@ -946,8 +947,7 @@ int pim_if_add_vif(struct interface *ifp) } ifaddr = pim_ifp->primary_address; - if (ifp->ifindex != PIM_OIF_PIM_REGISTER_VIF - && PIM_INADDR_IS_ANY(ifaddr)) { + if (!ispimreg && PIM_INADDR_IS_ANY(ifaddr)) { zlog_warn( "%s: could not get address for interface %s ifindex=%d", __PRETTY_FUNCTION__, ifp->name, ifp->ifindex); @@ -1468,7 +1468,7 @@ void pim_if_create_pimreg(struct pim_instance *pim) pim->regiface = if_create(pimreg_name, pim->vrf_id); pim->regiface->ifindex = PIM_OIF_PIM_REGISTER_VIF; - pim_if_new(pim->regiface, 0, 0); + pim_if_new(pim->regiface, false, false, true); } } diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h index 02926a6973..a7dc097f88 100644 --- a/pimd/pim_iface.h +++ b/pimd/pim_iface.h @@ -154,7 +154,8 @@ struct pim_interface { void pim_if_init(struct pim_instance *pim); void pim_if_terminate(struct pim_instance *pim); -struct pim_interface *pim_if_new(struct interface *ifp, int igmp, int pim); +struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim, + bool ispimreg); void pim_if_delete(struct interface *ifp); void pim_if_addr_add(struct connected *ifc); void pim_if_addr_del(struct connected *ifc, int force_prim_as_any); @@ -163,7 +164,7 @@ void pim_if_addr_del_all(struct interface *ifp); void pim_if_addr_del_all_igmp(struct interface *ifp); void pim_if_addr_del_all_pim(struct interface *ifp); -int pim_if_add_vif(struct interface *ifp); +int pim_if_add_vif(struct interface *ifp, bool ispimreg); int pim_if_del_vif(struct interface *ifp); void pim_if_add_vif_all(struct pim_instance *pim); void pim_if_del_vif_all(struct pim_instance *pim); diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index 3137345037..a3d6a2e658 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -1115,7 +1115,8 @@ void pim_ifchannel_local_membership_del(struct interface *ifp, struct channel_oil *c_oil = child->channel_oil; struct pim_ifchannel *chchannel = pim_ifchannel_find(ifp, &child->sg); - struct pim_interface *pim_ifp = ifp->info; + + pim_ifp = ifp->info; if (PIM_DEBUG_EVENTS) zlog_debug("%s %s: Prune(S,G)=%s(%s) from %s", diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c index 270f1e3f27..64537cfa84 100644 --- a/pimd/pim_igmp.c +++ b/pimd/pim_igmp.c @@ -98,7 +98,7 @@ static int igmp_sock_open(struct in_addr ifaddr, struct interface *ifp, if (!join) { flog_err_sys( - LIB_ERR_SOCKET, + EC_LIB_SOCKET, "IGMP socket fd=%d could not join any group on interface address %s", fd, inet_ntoa(ifaddr)); close(fd); @@ -700,7 +700,7 @@ static void sock_close(struct igmp_sock *igmp) if (close(igmp->fd)) { flog_err( - LIB_ERR_SOCKET, + EC_LIB_SOCKET, "Failure closing IGMP socket %s fd=%d on interface %s: errno=%d: %s", inet_ntoa(igmp->ifaddr), igmp->fd, igmp->interface->name, errno, safe_strerror(errno)); diff --git a/pimd/pim_igmp_mtrace.c b/pimd/pim_igmp_mtrace.c index 95d0278a34..1fb624a6a0 100644 --- a/pimd/pim_igmp_mtrace.c +++ b/pimd/pim_igmp_mtrace.c @@ -615,7 +615,7 @@ int igmp_mtrace_recv_qry_req(struct igmp_sock *igmp, struct ip *ip_hdr, static uint32_t qry_id, qry_src; char mtrace_buf[MTRACE_HDR_SIZE + MTRACE_MAX_HOPS * MTRACE_RSP_SIZE]; struct interface *ifp; - struct interface *out_ifp; + struct interface *out_ifp = NULL; struct pim_interface *pim_ifp; struct pim_instance *pim; struct igmp_mtrace *mtracep; diff --git a/pimd/pim_igmp_stats.c b/pimd/pim_igmp_stats.c index 428816e1f0..40851a4529 100644 --- a/pimd/pim_igmp_stats.c +++ b/pimd/pim_igmp_stats.c @@ -17,6 +17,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "pim_igmp_stats.h" void igmp_stats_init(struct igmp_stats *stats) diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index 7b21376c99..430cba76b0 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -1585,7 +1585,7 @@ void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname, msg_size = IGMP_V3_SOURCES_OFFSET + (num_sources << 2); if (msg_size > query_buf_size) { flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "%s %s: unable to send: msg_size=%zd larger than query_buf_size=%d", __FILE__, __PRETTY_FUNCTION__, msg_size, query_buf_size); diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index c69e2939e4..436e0508f3 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -154,12 +154,12 @@ static int pim_mroute_msg_nocache(int fd, struct interface *ifp, * the Interface type is SSM we don't need to * do anything here */ - if (!rpg || (pim_rpf_addr_is_inaddr_none(rpg)) - || (!(PIM_I_am_DR(pim_ifp)))) { + if (!rpg || pim_rpf_addr_is_inaddr_none(rpg)) { if (PIM_DEBUG_MROUTE_DETAIL) zlog_debug( - "%s: Interface is not configured correctly to handle incoming packet: Could be !DR, !pim_ifp, !SM, !RP", + "%s: Interface is not configured correctly to handle incoming packet: Could be !pim_ifp, !SM, !RP", __PRETTY_FUNCTION__); + return 0; } @@ -179,6 +179,26 @@ static int pim_mroute_msg_nocache(int fd, struct interface *ifp, sg.src = msg->im_src; sg.grp = msg->im_dst; + if (!(PIM_I_am_DR(pim_ifp))) { + struct channel_oil *c_oil; + + if (PIM_DEBUG_MROUTE_DETAIL) + zlog_debug("%s: Interface is not the DR blackholing incoming traffic for %s", + __PRETTY_FUNCTION__, pim_str_sg_dump(&sg)); + + /* + * We are not the DR, but we are still receiving packets + * Let's blackhole those packets for the moment + * As that they will be coming up to the cpu + * and causing us to consider them. + */ + c_oil = pim_channel_oil_add(pim_ifp->pim, &sg, + pim_ifp->mroute_vif_index); + pim_mroute_add(c_oil, __PRETTY_FUNCTION__); + + return 0; + } + up = pim_upstream_find_or_add(&sg, ifp, PIM_UPSTREAM_FLAG_MASK_FHR, __PRETTY_FUNCTION__); if (!up) { diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c index 7fcf42e8ce..5a75ed329c 100644 --- a/pimd/pim_msdp.c +++ b/pimd/pim_msdp.c @@ -519,7 +519,7 @@ static void pim_msdp_sa_local_del_on_up_del(struct pim_instance *pim, * changes; perhaps * address this in the next release? - XXX */ flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "MSDP sa %s SPT teardown is causing the local entry to be removed", sa->sg_str); return; diff --git a/pimd/pim_msdp_packet.c b/pimd/pim_msdp_packet.c index 65232aafa2..39e39b9557 100644 --- a/pimd/pim_msdp_packet.c +++ b/pimd/pim_msdp_packet.c @@ -147,7 +147,7 @@ static void pim_msdp_connect_check(struct pim_msdp_peer *mp) /* If getsockopt is fail, this is fatal error. */ if (ret < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "can't get sockopt for nonblocking connect"); pim_msdp_peer_reset_tcp_conn(mp, "connect-failed"); return; @@ -484,9 +484,9 @@ static void pim_msdp_pkt_sa_rx_one(struct pim_msdp_peer *mp, struct in_addr rp) if (prefix_len != 32) { /* ignore SA update if the prefix length is not 32 */ - flog_err(PIM_ERR_MSDP_PACKET, - "rxed sa update with invalid prefix length %d", - prefix_len); + flog_err(EC_PIM_MSDP_PACKET, + "rxed sa update with invalid prefix length %d", + prefix_len); return; } if (PIM_DEBUG_MSDP_PACKETS) { diff --git a/pimd/pim_msdp_socket.c b/pimd/pim_msdp_socket.c index feac42cf53..7997d3138a 100644 --- a/pimd/pim_msdp_socket.c +++ b/pimd/pim_msdp_socket.c @@ -43,7 +43,7 @@ static void pim_msdp_update_sock_send_buffer_size(int fd) socklen_t optlen = sizeof(optval); if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &optval, &optlen) < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "getsockopt of SO_SNDBUF failed %s\n", safe_strerror(errno)); return; @@ -52,7 +52,7 @@ static void pim_msdp_update_sock_send_buffer_size(int fd) if (optval < size) { if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)) < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "Couldn't increase send buffer: %s\n", safe_strerror(errno)); } @@ -74,8 +74,8 @@ static int pim_msdp_sock_accept(struct thread *thread) /* re-register accept thread */ accept_sock = THREAD_FD(thread); if (accept_sock < 0) { - flog_err(LIB_ERR_DEVELOPMENT, - "accept_sock is negative value %d", accept_sock); + flog_err(EC_LIB_DEVELOPMENT, "accept_sock is negative value %d", + accept_sock); return -1; } pim->msdp.listener.thread = NULL; @@ -85,7 +85,7 @@ static int pim_msdp_sock_accept(struct thread *thread) /* accept client connection. */ msdp_sock = sockunion_accept(accept_sock, &su); if (msdp_sock < 0) { - flog_err_sys(LIB_ERR_SOCKET, "pim_msdp_sock_accept failed (%s)", + flog_err_sys(EC_LIB_SOCKET, "pim_msdp_sock_accept failed (%s)", safe_strerror(errno)); return -1; } @@ -95,9 +95,9 @@ static int pim_msdp_sock_accept(struct thread *thread) if (!mp || !PIM_MSDP_PEER_IS_LISTENER(mp)) { ++pim->msdp.rejected_accepts; if (PIM_DEBUG_MSDP_EVENTS) { - flog_err(PIM_ERR_MSDP_PACKET, - "msdp peer connection refused from %s", - sockunion2str(&su, buf, SU_ADDRSTRLEN)); + flog_err(EC_PIM_MSDP_PACKET, + "msdp peer connection refused from %s", + sockunion2str(&su, buf, SU_ADDRSTRLEN)); } close(msdp_sock); return -1; @@ -141,8 +141,7 @@ int pim_msdp_sock_listen(struct pim_instance *pim) sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { - flog_err_sys(LIB_ERR_SOCKET, "socket: %s", - safe_strerror(errno)); + flog_err_sys(EC_LIB_SOCKET, "socket: %s", safe_strerror(errno)); return sock; } @@ -161,14 +160,14 @@ int pim_msdp_sock_listen(struct pim_instance *pim) struct interface *ifp = if_lookup_by_name(pim->vrf->name, pim->vrf_id); if (!ifp) { - flog_err(LIB_ERR_INTERFACE, - "%s: Unable to lookup vrf interface: %s", - __PRETTY_FUNCTION__, pim->vrf->name); + flog_err(EC_LIB_INTERFACE, + "%s: Unable to lookup vrf interface: %s", + __PRETTY_FUNCTION__, pim->vrf->name); close(sock); return -1; } if (pim_socket_bind(sock, ifp)) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "%s: Unable to bind to socket: %s", __PRETTY_FUNCTION__, safe_strerror(errno)); close(sock); @@ -182,7 +181,7 @@ int pim_msdp_sock_listen(struct pim_instance *pim) } if (rc < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "pim_msdp_socket bind to port %d: %s", ntohs(sin.sin_port), safe_strerror(errno)); close(sock); @@ -191,7 +190,7 @@ int pim_msdp_sock_listen(struct pim_instance *pim) rc = listen(sock, 3 /* backlog */); if (rc < 0) { - flog_err_sys(LIB_ERR_SOCKET, "pim_msdp_socket listen: %s", + flog_err_sys(EC_LIB_SOCKET, "pim_msdp_socket listen: %s", safe_strerror(errno)); close(sock); return rc; @@ -232,7 +231,7 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) /* Make socket for the peer. */ mp->fd = sockunion_socket(&mp->su_peer); if (mp->fd < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "pim_msdp_socket socket failure: %s", safe_strerror(errno)); return -1; @@ -242,13 +241,13 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) struct interface *ifp = if_lookup_by_name(mp->pim->vrf->name, mp->pim->vrf_id); if (!ifp) { - flog_err(LIB_ERR_INTERFACE, - "%s: Unable to lookup vrf interface: %s", - __PRETTY_FUNCTION__, mp->pim->vrf->name); + flog_err(EC_LIB_INTERFACE, + "%s: Unable to lookup vrf interface: %s", + __PRETTY_FUNCTION__, mp->pim->vrf->name); return -1; } if (pim_socket_bind(mp->fd, ifp)) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "%s: Unable to bind to socket: %s", __PRETTY_FUNCTION__, safe_strerror(errno)); close(mp->fd); @@ -267,7 +266,7 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) /* source bind */ rc = sockunion_bind(mp->fd, &mp->su_local, 0, &mp->su_local); if (rc < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "pim_msdp_socket connect bind failure: %s", safe_strerror(errno)); close(mp->fd); diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c index 11d8476362..bff1e7ff13 100644 --- a/pimd/pim_neighbor.c +++ b/pimd/pim_neighbor.c @@ -801,7 +801,7 @@ void pim_neighbor_update(struct pim_neighbor *neigh, if (neigh->prefix_list == addr_list) { if (addr_list) { flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "%s: internal error: trying to replace same prefix list=%p", __PRETTY_FUNCTION__, (void *)addr_list); } diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c index d5ee30fb2e..0696a680e7 100644 --- a/pimd/pim_pim.c +++ b/pimd/pim_pim.c @@ -116,9 +116,9 @@ void pim_sock_delete(struct interface *ifp, const char *delete_message) delete_message); if (!ifp->info) { - flog_err(PIM_ERR_CONFIG, - "%s: %s: but PIM not enabled on interface %s (!)", - __PRETTY_FUNCTION__, delete_message, ifp->name); + flog_err(EC_PIM_CONFIG, + "%s: %s: but PIM not enabled on interface %s (!)", + __PRETTY_FUNCTION__, delete_message, ifp->name); return; } @@ -573,8 +573,6 @@ int pim_msg_send(int fd, struct in_addr src, struct in_addr dst, ip->ip_len = htons(sendlen); if (PIM_DEBUG_PIM_PACKETS) { - struct pim_msg_header *header = - (struct pim_msg_header *)pim_msg; char dst_str[INET_ADDRSTRLEN]; pim_inet4_dump("<dst?>", dst, dst_str, sizeof(dst_str)); zlog_debug("%s: to %s on %s: msg_size=%d checksum=%x", diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c index 3db5015e73..51ca0945b9 100644 --- a/pimd/pim_rp.c +++ b/pimd/pim_rp.c @@ -113,8 +113,8 @@ void pim_rp_init(struct pim_instance *pim) rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info)); if (!str2prefix("224.0.0.0/4", &rp_info->group)) { - flog_err(LIB_ERR_DEVELOPMENT, - "Unable to convert 224.0.0.0/4 to prefix"); + flog_err(EC_LIB_DEVELOPMENT, + "Unable to convert 224.0.0.0/4 to prefix"); list_delete_and_null(&pim->rp_list); route_table_finish(pim->rp_table); XFREE(MTYPE_PIM_RP, rp_info); @@ -236,7 +236,7 @@ static struct rp_info *pim_rp_find_match_group(struct pim_instance *pim, rn = route_node_match(pim->rp_table, group); if (!rn) { flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "%s: BUG We should have found default group information\n", __PRETTY_FUNCTION__); return best; @@ -625,7 +625,7 @@ int pim_rp_del(struct pim_instance *pim, const char *rp, if (rn) { if (rn->info != rp_info) flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "Expected rn->info to be equal to rp_info"); if (PIM_DEBUG_TRACE) { @@ -951,8 +951,7 @@ int pim_rp_check_is_my_ip_address(struct pim_instance *pim, return 0; } -void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, - uint8_t uj) +void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, bool uj) { struct rp_info *rp_info; struct rp_info *prev_rp_info = NULL; diff --git a/pimd/pim_rp.h b/pimd/pim_rp.h index e0631b27be..672a696319 100644 --- a/pimd/pim_rp.h +++ b/pimd/pim_rp.h @@ -68,7 +68,7 @@ struct pim_rpf *pim_rp_g(struct pim_instance *pim, struct in_addr group); #define RP(P, G) pim_rp_g ((P), (G)) void pim_rp_show_information(struct pim_instance *pim, struct vty *vty, - uint8_t uj); + bool uj); void pim_resolve_rp_nh(struct pim_instance *pim); int pim_rp_list_cmp(void *v1, void *v2); #endif diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c index 1f584a2f9a..c4538a4ac5 100644 --- a/pimd/pim_sock.c +++ b/pimd/pim_sock.c @@ -151,7 +151,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp, } #else flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "%s %s: Missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()", __FILE__, __PRETTY_FUNCTION__); close(fd); @@ -289,7 +289,7 @@ int pim_socket_join(int fd, struct in_addr group, struct in_addr ifaddr, sprintf(ifaddr_str, "<ifaddr?>"); flog_err( - LIB_ERR_SOCKET, + EC_LIB_SOCKET, "Failure socket joining fd=%d group %s on interface address %s: errno=%d: %s", fd, group_str, ifaddr_str, errno, safe_strerror(errno)); return ret; diff --git a/pimd/pim_ssm.c b/pimd/pim_ssm.c index 8347878d3f..dfc7063fd0 100644 --- a/pimd/pim_ssm.c +++ b/pimd/pim_ssm.c @@ -73,9 +73,9 @@ static int pim_is_grp_standard_ssm(struct prefix *group) if (first) { if (!str2prefix(PIM_SSM_STANDARD_RANGE, &group_ssm)) - flog_err(LIB_ERR_DEVELOPMENT, - "%s: Failure to Read Group Address: %s", - __PRETTY_FUNCTION__, PIM_SSM_STANDARD_RANGE); + flog_err(EC_LIB_DEVELOPMENT, + "%s: Failure to Read Group Address: %s", + __PRETTY_FUNCTION__, PIM_SSM_STANDARD_RANGE); first = 0; } diff --git a/pimd/pim_ssmpingd.c b/pimd/pim_ssmpingd.c index be30d9c73e..a5082608b8 100644 --- a/pimd/pim_ssmpingd.c +++ b/pimd/pim_ssmpingd.c @@ -83,7 +83,7 @@ static int ssmpingd_socket(struct in_addr addr, int port, int mttl) fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "%s: could not create socket: errno=%d: %s", __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; @@ -127,7 +127,7 @@ static int ssmpingd_socket(struct in_addr addr, int port, int mttl) } #else flog_err( - LIB_ERR_DEVELOPMENT, + EC_LIB_DEVELOPMENT, "%s %s: missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()", __FILE__, __PRETTY_FUNCTION__); close(fd); diff --git a/pimd/pim_time.c b/pimd/pim_time.c index 029e551167..23c85c2fa8 100644 --- a/pimd/pim_time.c +++ b/pimd/pim_time.c @@ -35,7 +35,7 @@ static int gettime_monotonic(struct timeval *tv) result = gettimeofday(tv, 0); if (result) { - flog_err_sys(LIB_ERR_SYSTEM_CALL, + flog_err_sys(EC_LIB_SYSTEM_CALL, "%s: gettimeofday() failure: errno=%d: %s", __PRETTY_FUNCTION__, errno, safe_strerror(errno)); } @@ -52,7 +52,7 @@ int64_t pim_time_monotonic_sec() struct timeval now_tv; if (gettime_monotonic(&now_tv)) { - flog_err_sys(LIB_ERR_SYSTEM_CALL, + flog_err_sys(EC_LIB_SYSTEM_CALL, "%s: gettime_monotonic() failure: errno=%d: %s", __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; @@ -71,7 +71,7 @@ int64_t pim_time_monotonic_dsec() int64_t now_dsec; if (gettime_monotonic(&now_tv)) { - flog_err_sys(LIB_ERR_SYSTEM_CALL, + flog_err_sys(EC_LIB_SYSTEM_CALL, "%s: gettime_monotonic() failure: errno=%d: %s", __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; @@ -89,7 +89,7 @@ int64_t pim_time_monotonic_usec(void) int64_t now_dsec; if (gettime_monotonic(&now_tv)) { - flog_err_sys(LIB_ERR_SYSTEM_CALL, + flog_err_sys(EC_LIB_SYSTEM_CALL, "%s: gettime_monotonic() failure: errno=%d: %s", __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index 15cbf6fbc3..cc255a51e2 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -1764,15 +1764,18 @@ void pim_upstream_remove_lhr_star_pimreg(struct pim_instance *pim, void pim_upstream_init(struct pim_instance *pim) { - char hash_name[64]; + char name[64]; + snprintf(name, 64, "PIM %s Timer Wheel", + pim->vrf->name); pim->upstream_sg_wheel = wheel_init(master, 31000, 100, pim_upstream_hash_key, - pim_upstream_sg_running); + pim_upstream_sg_running, name); - snprintf(hash_name, 64, "PIM %s Upstream Hash", pim->vrf->name); + snprintf(name, 64, "PIM %s Upstream Hash", + pim->vrf->name); pim->upstream_hash = hash_create_size(8192, pim_upstream_hash_key, - pim_upstream_equal, hash_name); + pim_upstream_equal, name); pim->upstream_list = list_new(); pim->upstream_list->cmp = pim_upstream_compare; diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c index 88be195bee..a4aec710e9 100644 --- a/pimd/pim_vty.c +++ b/pimd/pim_vty.c @@ -267,7 +267,7 @@ int pim_interface_config_write(struct vty *vty) struct pim_interface *pim_ifp = ifp->info; if (PIM_IF_TEST_PIM(pim_ifp->options)) { - vty_out(vty, " ip pim sm\n"); + vty_out(vty, " ip pim\n"); ++writes; } diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index ab6258ad36..4ff9bd6bdc 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -112,7 +112,7 @@ static int pim_zebra_if_add(int command, struct zclient *zclient, struct pim_interface *pim_ifp; if (!ifp->info) { - pim_ifp = pim_if_new(ifp, 0, 0); + pim_ifp = pim_if_new(ifp, false, false, false); ifp->info = pim_ifp; } @@ -1044,9 +1044,14 @@ void igmp_source_forward_start(struct pim_instance *pim, return; } - if (!(PIM_I_am_DR(pim_oif))) + if (!(PIM_I_am_DR(pim_oif))) { + if (PIM_DEBUG_IGMP_TRACE) + zlog_debug("%s: %s was received on %s interface but we are not DR for that interface", + __PRETTY_FUNCTION__, + pim_str_sg_dump(&sg), + group->group_igmp_sock->interface->name); return; - + } /* Feed IGMPv3-gathered local membership information into PIM per-interface (S,G) state. diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c index baa07a8ec6..48a228c744 100644 --- a/pimd/pim_zlookup.c +++ b/pimd/pim_zlookup.c @@ -123,8 +123,8 @@ void zclient_lookup_new(void) { zlookup = zclient_new_notify(master, &zclient_options_default); if (!zlookup) { - flog_err(LIB_ERR_ZAPI_SOCKET, "%s: zclient_new() failure", - __PRETTY_FUNCTION__); + flog_err(EC_LIB_ZAPI_SOCKET, "%s: zclient_new() failure", + __PRETTY_FUNCTION__); return; } @@ -170,9 +170,9 @@ static int zclient_read_nexthop(struct pim_instance *pim, err = zclient_read_header(s, zlookup->sock, &length, &marker, &version, &vrf_id, &command); if (err < 0) { - flog_err(LIB_ERR_ZAPI_MISSMATCH, - "%s: zclient_read_header() failed", - __PRETTY_FUNCTION__); + flog_err(EC_LIB_ZAPI_MISSMATCH, + "%s: zclient_read_header() failed", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -1; } @@ -315,9 +315,9 @@ static int zclient_lookup_nexthop_once(struct pim_instance *pim, /* Check socket. */ if (zlookup->sock < 0) { - flog_err(LIB_ERR_ZAPI_SOCKET, - "%s: zclient lookup socket is not connected", - __PRETTY_FUNCTION__); + flog_err(EC_LIB_ZAPI_SOCKET, + "%s: zclient lookup socket is not connected", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -1; } @@ -338,14 +338,14 @@ static int zclient_lookup_nexthop_once(struct pim_instance *pim, ret = writen(zlookup->sock, s->data, stream_get_endp(s)); if (ret < 0) { flog_err( - LIB_ERR_SOCKET, + EC_LIB_SOCKET, "%s: writen() failure: %d writing to zclient lookup socket", __PRETTY_FUNCTION__, errno); zclient_lookup_failed(zlookup); return -2; } if (ret == 0) { - flog_err_sys(LIB_ERR_SOCKET, + flog_err_sys(EC_LIB_SOCKET, "%s: connection closed on zclient lookup socket", __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); @@ -516,7 +516,7 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) ret = writen(zlookup->sock, s->data, count); if (ret <= 0) { flog_err( - LIB_ERR_SOCKET, + EC_LIB_SOCKET, "%s: writen() failure: %d writing to zclient lookup socket", __PRETTY_FUNCTION__, errno); return -1; @@ -535,9 +535,9 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) err = zclient_read_header(s, zlookup->sock, &length, &marker, &version, &vrf_id, &command); if (err < 0) { - flog_err(LIB_ERR_ZAPI_MISSMATCH, - "%s: zclient_read_header() failed", - __PRETTY_FUNCTION__); + flog_err(EC_LIB_ZAPI_MISSMATCH, + "%s: zclient_read_header() failed", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -1; } @@ -553,7 +553,7 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) more.src = c_oil->oil.mfcc_origin; more.grp = c_oil->oil.mfcc_mcastgrp; flog_err( - LIB_ERR_ZAPI_MISSMATCH, + EC_LIB_ZAPI_MISSMATCH, "%s: Received wrong %s(%s) information requested", __PRETTY_FUNCTION__, pim_str_sg_dump(&more), c_oil->pim->vrf->name); diff --git a/pimd/pimd.c b/pimd/pimd.c index dd0c7e3c2a..5d3018b2fd 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -86,7 +86,7 @@ void pim_init() { if (!inet_aton(PIM_ALL_PIM_ROUTERS, &qpim_all_pim_routers_addr)) { flog_err( - LIB_ERR_SOCKET, + EC_LIB_SOCKET, "%s %s: could not solve %s to group address: errno=%d: %s", __FILE__, __PRETTY_FUNCTION__, PIM_ALL_PIM_ROUTERS, errno, safe_strerror(errno)); diff --git a/pimd/subdir.am b/pimd/subdir.am index 55d56ece97..fef8e36577 100644 --- a/pimd/subdir.am +++ b/pimd/subdir.am @@ -8,6 +8,9 @@ sbin_PROGRAMS += pimd/pimd bin_PROGRAMS += pimd/mtracebis noinst_PROGRAMS += pimd/test_igmpv3_join dist_examples_DATA += pimd/pimd.conf.sample +vtysh_scan += $(top_srcdir)/pimd/pim_cmd.c +man8 += $(MANBUILD)/pimd.8 +man8 += $(MANBUILD)/mtracebis.8 endif pimd_libpim_a_SOURCES = \ |
