int idx = 2;
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
+ if (!vrf)
+ return CMD_WARNING;
+
show_mroute_count(vrf->info, vty);
return CMD_SUCCESS;
}
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
{
pim = vrf->info;
- if (!pim || vrf->vrf_id != VRF_DEFAULT) {
- vty_out(vty, "vrf %s\n", vrf->name);
- pim_global_config_write_worker(pim, vty);
- vty_out(vty, "!\n");
- }
+
+ if (!pim)
+ continue;
+
+ if (vrf->vrf_id == VRF_DEFAULT)
+ continue;
+
+ vty_out(vty, "vrf %s\n", vrf->name);
+ pim_global_config_write_worker(pim, vty);
+ vty_out(vty, "!\n");
}
return 0;
fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
+ if (fd < 0) {
+ zlog_warn("Could not create mroute socket: errno=%d: %s", errno,
+ safe_strerror(errno));
+ return -2;
+ }
+
#ifdef SO_BINDTODEVICE
- setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, pim->vrf->name,
- strlen(pim->vrf->name));
+ if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, pim->vrf->name,
+ strlen(pim->vrf->name))) {
+ zlog_warn("Could not setsockopt SO_BINDTODEVICE: %s",
+ safe_strerror(errno));
+ close(fd);
+ return -3;
+ }
#endif
if (pimd_privs.change(ZPRIVS_LOWER))
zlog_err("pim_mroute_socket_enable: could not lower privs, %s",
safe_strerror(errno));
- if (fd < 0) {
- zlog_warn("Could not create mroute socket: errno=%d: %s", errno,
- safe_strerror(errno));
- return -2;
- }
-
pim->mroute_socket = fd;
if (pim_mroute_set(pim, 1)) {
zlog_warn(
if (!ifp) {
zlog_err("%s: Unable to lookup vrf interface: %s",
__PRETTY_FUNCTION__, pim->vrf->name);
+ close(sock);
+ return -1;
+ }
+ if (pim_socket_bind(sock, ifp)) {
+ zlog_err("%s: Unable to bind to socket: %s",
+ __PRETTY_FUNCTION__, safe_strerror(errno));
+ close(sock);
return -1;
}
- pim_socket_bind(sock, ifp);
}
if (pimd_privs.change(ZPRIVS_RAISE)) {
__PRETTY_FUNCTION__, mp->pim->vrf->name);
return -1;
}
- pim_socket_bind(mp->fd, ifp);
+ if (pim_socket_bind(mp->fd, ifp)) {
+ zlog_err("%s: Unable to bind to socket: %s",
+ __PRETTY_FUNCTION__, safe_strerror(errno));
+ close(mp->fd);
+ mp->fd = -1;
+ return -1;
+ }
}
set_nonblocking(mp->fd);
}
pim_delete_tracked_nexthop(pim, &nht_p, NULL, rp_info);
- str2prefix("224.0.0.0/4", &g_all);
+ if (!str2prefix("224.0.0.0/4", &g_all))
+ return PIM_RP_BAD_ADDRESS;
+
rp_all = pim_rp_find_match_group(pim, &g_all);
if (rp_all == rp_info) {
return fd;
}
-int pim_socket_ip_hdr(int fd)
+void pim_socket_ip_hdr(int fd)
{
const int on = 1;
- int ret;
if (pimd_privs.change(ZPRIVS_RAISE))
zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__,
safe_strerror(errno));
- ret = setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
+ if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)))
+ zlog_err("%s: Could not turn on IP_HDRINCL option: %s",
+ __PRETTY_FUNCTION__, safe_strerror(errno));
if (pimd_privs.change(ZPRIVS_LOWER))
zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__,
safe_strerror(errno));
-
- return ret;
}
/*
#define PIM_SOCK_ERR_BIND (-11) /* Can't bind to interface */
int pim_socket_bind(int fd, struct interface *ifp);
-int pim_socket_ip_hdr(int fd);
+void pim_socket_ip_hdr(int fd);
int pim_socket_raw(int protocol);
int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp,
u_char loop);
static struct prefix group_ssm;
if (first) {
- str2prefix(PIM_SSM_STANDARD_RANGE, &group_ssm);
+ if (!str2prefix(PIM_SSM_STANDARD_RANGE, &group_ssm))
+ zlog_err("%s: Failure to Read Group Address: %s",
+ __PRETTY_FUNCTION__, PIM_SSM_STANDARD_RANGE);
+
first = 0;
}
&& (ifp->vrf_id != vrf->vrf_id)) {
struct interface *master = if_lookup_by_name(
vrf->name, vrf->vrf_id);
+
+ if (!master) {
+ zlog_debug("%s: Unable to find Master interface for %s",
+ __PRETTY_FUNCTION__,
+ vrf->name);
+ return 0;
+ }
zclient_interface_set_master(zclient, master,
ifp);
}