#include "pim_assert.h"
#include "pim_msg.h"
#include "pim_register.h"
+#include "pim_errors.h"
static int on_pim_hello_send(struct thread *t);
static int pim_hello_send(struct interface *ifp, uint16_t holdtime);
delete_message);
if (!ifp->info) {
- zlog_err("%s: %s: but PIM not enabled on interface %s (!)",
+ flog_err(EC_PIM_CONFIG,
+ "%s: %s: but PIM not enabled on interface %s (!)",
__PRETTY_FUNCTION__, delete_message, ifp->name);
return;
}
* it's the right interface because we bind to it
*/
ifp = if_lookup_by_index(ifindex, pim_ifp->pim->vrf_id);
- if (!ifp->info) {
+ if (!ifp || !ifp->info) {
if (PIM_DEBUG_PIM_PACKETS)
zlog_debug(
- "%s: Received incoming pim packet on interface not yet configured for pim %s",
- __PRETTY_FUNCTION__, ifp->name);
+ "%s: Received incoming pim packet on interface(%s:%d) not yet configured for pim",
+ __PRETTY_FUNCTION__,
+ ifp ? ifp->name : "Unknown", ifindex);
goto done;
}
int fail = pim_pim_packet(ifp, buf, len);
socklen_t tolen;
unsigned char buffer[10000];
unsigned char *msg_start;
- uint8_t ttl = MAXTTL;
+ uint8_t ttl;
struct pim_msg_header *header;
struct ip *ip;
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",
{
struct pim_interface *pim_ifp = ifp->info;
- if (pim_if_is_loopback(pim_ifp->pim, ifp))
+ if (if_is_loopback_or_vrf(ifp))
return 0;
if (hello_send(ifp, holdtime)) {
{
struct pim_interface *pim_ifp;
- zassert(ifp);
pim_ifp = ifp->info;
- zassert(pim_ifp);
if (PIM_DEBUG_PIM_HELLO) {
zlog_debug("Rescheduling %d sec hello on interface %s",
struct interface *ifp;
ifp = THREAD_ARG(t);
-
pim_ifp = ifp->info;
/*
{
struct pim_interface *pim_ifp;
- zassert(ifp);
pim_ifp = ifp->info;
- zassert(pim_ifp);
/*
* Reset next hello timer
int triggered_hello_delay_msec;
int random_msec;
- zassert(ifp);
pim_ifp = ifp->info;
- zassert(pim_ifp);
+
+ /*
+ * No need to ever start loopback or vrf device hello's
+ */
+ if (if_is_loopback_or_vrf(ifp))
+ return;
/*
* There exists situations where we have the a RPF out this