FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp;
struct listnode *sock_node;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
pim_ifp = ifp->info;
struct vty *vty, const char *ifname,
bool uj)
{
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct interface *ifp;
struct listnode *sock_node;
struct pim_interface *pim_ifp;
FOR_ALL_INTERFACES (pim->vrf, ifp) {
struct pim_interface *pim_ifp;
struct listnode *sock_node;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
pim_ifp = ifp->info;
pim_ifp->upstream_switch_list = NULL;
pim_ifp->pim_generation_id = 0;
- /* list of struct igmp_sock */
+ /* list of struct gm_sock */
pim_igmp_if_init(pim_ifp, ifp);
/* list of struct pim_neighbor */
// return;
if (PIM_IF_TEST_IGMP(pim_ifp->options)) {
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
/* lookup IGMP socket */
igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->socket_list,
}
} /* igmp */
else {
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
/* lookup IGMP socket */
igmp = pim_igmp_sock_lookup_ifaddr(pim_ifp->socket_list,
static void pim_if_addr_del_igmp(struct connected *ifc)
{
struct pim_interface *pim_ifp = ifc->ifp->info;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct in_addr ifaddr;
if (ifc->address->family != AF_INET) {
int size = array_size(igmp_sock_array);
for (int i = 0; i < size; ++i) {
- struct igmp_sock *igmp = array_get(igmp_sock_array, i);
+ struct gm_sock *igmp = array_get(igmp_sock_array, i);
zlog_debug("%s %s: [%d/%d] igmp_addr=%pI4 fd=%d", __FILE__,
__func__, i, size, &igmp->ifaddr,
}
#endif
-struct igmp_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list,
- struct in_addr ifaddr)
+struct gm_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list,
+ struct in_addr ifaddr)
{
struct listnode *sock_node;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
#ifdef IGMP_SOCK_DUMP
igmp_sock_dump(igmp_sock_list);
static int pim_igmp_other_querier_expire(struct thread *t)
{
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
igmp = THREAD_ARG(t);
return 0;
}
-void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp)
+void pim_igmp_other_querier_timer_on(struct gm_sock *igmp)
{
long other_querier_present_interval_msec;
struct pim_interface *pim_ifp;
&igmp->t_other_querier_timer);
}
-void pim_igmp_other_querier_timer_off(struct igmp_sock *igmp)
+void pim_igmp_other_querier_timer_off(struct gm_sock *igmp)
{
assert(igmp);
return 0;
}
-static int igmp_recv_query(struct igmp_sock *igmp, int query_version,
+static int igmp_recv_query(struct gm_sock *igmp, int query_version,
int max_resp_code, struct in_addr from,
const char *from_str, char *igmp_msg,
int igmp_msg_len)
}
}
-static int igmp_v1_recv_report(struct igmp_sock *igmp, struct in_addr from,
+static int igmp_v1_recv_report(struct gm_sock *igmp, struct in_addr from,
const char *from_str, char *igmp_msg,
int igmp_msg_len)
{
return true;
}
-int pim_igmp_packet(struct igmp_sock *igmp, char *buf, size_t len)
+int pim_igmp_packet(struct gm_sock *igmp, char *buf, size_t len)
{
struct ip *ip_hdr = (struct ip *)buf;
size_t ip_hlen; /* ip header length in bytes */
return -1;
}
-void pim_igmp_general_query_on(struct igmp_sock *igmp)
+void pim_igmp_general_query_on(struct gm_sock *igmp)
{
struct pim_interface *pim_ifp;
int startup_mode;
query_interval, &igmp->t_igmp_query_timer);
}
-void pim_igmp_general_query_off(struct igmp_sock *igmp)
+void pim_igmp_general_query_off(struct gm_sock *igmp)
{
assert(igmp);
/* Issue IGMP general query */
static int pim_igmp_general_query(struct thread *t)
{
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct in_addr dst_addr;
struct in_addr group_addr;
struct pim_interface *pim_ifp;
return 0;
}
-static void sock_close(struct igmp_sock *igmp)
+static void sock_close(struct gm_sock *igmp)
{
pim_igmp_other_querier_timer_off(igmp);
pim_igmp_general_query_off(igmp);
}
}
-void igmp_startup_mode_on(struct igmp_sock *igmp)
+void igmp_startup_mode_on(struct gm_sock *igmp)
{
struct pim_interface *pim_ifp;
igmp_group_delete(group);
}
-void igmp_sock_free(struct igmp_sock *igmp)
+void igmp_sock_free(struct gm_sock *igmp)
{
assert(!igmp->t_igmp_read);
assert(!igmp->t_igmp_query_timer);
XFREE(MTYPE_PIM_IGMP_SOCKET, igmp);
}
-void igmp_sock_delete(struct igmp_sock *igmp)
+void igmp_sock_delete(struct gm_sock *igmp)
{
struct pim_interface *pim_ifp;
{
struct pim_interface *pim_ifp;
struct listnode *igmp_node, *igmp_nextnode;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
pim_ifp = ifp->info;
list_delete(&pim_ifp->socket_list);
}
-static struct igmp_sock *igmp_sock_new(int fd, struct in_addr ifaddr,
- struct interface *ifp, int mtrace_only)
+static struct gm_sock *igmp_sock_new(int fd, struct in_addr ifaddr,
+ struct interface *ifp, int mtrace_only)
{
struct pim_interface *pim_ifp;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
pim_ifp = ifp->info;
return igmp;
}
-static void igmp_read_on(struct igmp_sock *igmp);
+static void igmp_read_on(struct gm_sock *igmp);
static int pim_igmp_read(struct thread *t)
{
uint8_t buf[10000];
- struct igmp_sock *igmp = (struct igmp_sock *)THREAD_ARG(t);
+ struct gm_sock *igmp = (struct gm_sock *)THREAD_ARG(t);
struct sockaddr_in from;
struct sockaddr_in to;
socklen_t fromlen = sizeof(from);
return 0;
}
-static void igmp_read_on(struct igmp_sock *igmp)
+static void igmp_read_on(struct gm_sock *igmp)
{
if (PIM_DEBUG_IGMP_TRACE_DETAIL) {
&igmp->t_igmp_read);
}
-struct igmp_sock *pim_igmp_sock_add(struct list *igmp_sock_list,
- struct in_addr ifaddr,
- struct interface *ifp,
- bool mtrace_only)
+struct gm_sock *pim_igmp_sock_add(struct list *igmp_sock_list,
+ struct in_addr ifaddr, struct interface *ifp,
+ bool mtrace_only)
{
struct pim_interface *pim_ifp;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct sockaddr_in sin;
int fd;
interval_msec, &group->t_group_timer);
}
-struct gm_group *find_group_by_addr(struct igmp_sock *igmp,
+struct gm_group *find_group_by_addr(struct gm_sock *igmp,
struct in_addr group_addr)
{
struct gm_group lookup;
return hash_lookup(pim_ifp->group_hash, &lookup);
}
-struct gm_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
+struct gm_group *igmp_add_group_by_addr(struct gm_sock *igmp,
struct in_addr group_addr)
{
struct gm_group *group;
{
struct pim_interface *pim_ifp = ifp->info;
struct listnode *sock_node = NULL;
- struct igmp_sock *igmp = NULL;
+ struct gm_sock *igmp = NULL;
struct in_addr dst_addr;
struct in_addr group_addr;
int query_buf_size;
time_t sock_creation;
};
-struct igmp_sock {
+struct gm_sock {
int fd;
struct interface *interface;
struct in_addr ifaddr;
void pim_igmp_if_reset(struct pim_interface *pim_ifp);
void pim_igmp_if_fini(struct pim_interface *pim_ifp);
-struct igmp_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list,
- struct in_addr ifaddr);
-struct igmp_sock *pim_igmp_sock_add(struct list *igmp_sock_list,
- struct in_addr ifaddr,
- struct interface *ifp,
- bool mtrace_only);
-void igmp_sock_delete(struct igmp_sock *igmp);
-void igmp_sock_free(struct igmp_sock *igmp);
+struct gm_sock *pim_igmp_sock_lookup_ifaddr(struct list *igmp_sock_list,
+ struct in_addr ifaddr);
+struct gm_sock *pim_igmp_sock_add(struct list *igmp_sock_list,
+ struct in_addr ifaddr, struct interface *ifp,
+ bool mtrace_only);
+void igmp_sock_delete(struct gm_sock *igmp);
+void igmp_sock_free(struct gm_sock *igmp);
void igmp_sock_delete_all(struct interface *ifp);
-int pim_igmp_packet(struct igmp_sock *igmp, char *buf, size_t len);
+int pim_igmp_packet(struct gm_sock *igmp, char *buf, size_t len);
bool pim_igmp_verify_header(struct ip *ip_hdr, size_t len, size_t *ip_hlen);
-void pim_igmp_general_query_on(struct igmp_sock *igmp);
-void pim_igmp_general_query_off(struct igmp_sock *igmp);
-void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp);
-void pim_igmp_other_querier_timer_off(struct igmp_sock *igmp);
+void pim_igmp_general_query_on(struct gm_sock *igmp);
+void pim_igmp_general_query_off(struct gm_sock *igmp);
+void pim_igmp_other_querier_timer_on(struct gm_sock *igmp);
+void pim_igmp_other_querier_timer_off(struct gm_sock *igmp);
int igmp_validate_checksum(char *igmp_msg, int igmp_msg_len);
int64_t last_igmp_v2_report_dsec;
};
-struct gm_group *find_group_by_addr(struct igmp_sock *igmp,
+struct gm_group *find_group_by_addr(struct gm_sock *igmp,
struct in_addr group_addr);
-struct gm_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
+struct gm_group *igmp_add_group_by_addr(struct gm_sock *igmp,
struct in_addr group_addr);
struct gm_source *igmp_get_source_by_addr(struct gm_group *group,
void igmp_group_delete_empty_include(struct gm_group *group);
-void igmp_startup_mode_on(struct igmp_sock *igmp);
+void igmp_startup_mode_on(struct gm_sock *igmp);
void igmp_group_timer_on(struct gm_group *group, long interval_msec,
const char *ifname);
mtracep->rsp_addr, mtracep->grp_addr);
}
-int igmp_mtrace_recv_qry_req(struct igmp_sock *igmp, struct ip *ip_hdr,
+int igmp_mtrace_recv_qry_req(struct gm_sock *igmp, struct ip *ip_hdr,
struct in_addr from, const char *from_str,
char *igmp_msg, int igmp_msg_len)
{
}
/* 6.3. Traceroute responses */
-int igmp_mtrace_recv_response(struct igmp_sock *igmp, struct ip *ip_hdr,
+int igmp_mtrace_recv_response(struct gm_sock *igmp, struct ip *ip_hdr,
struct in_addr from, const char *from_str,
char *igmp_msg, int igmp_msg_len)
{
#define MTRACE_HDR_SIZE (sizeof(struct igmp_mtrace))
#define MTRACE_RSP_SIZE (sizeof(struct igmp_mtrace_rsp))
-int igmp_mtrace_recv_qry_req(struct igmp_sock *igmp, struct ip *ip_hdr,
+int igmp_mtrace_recv_qry_req(struct gm_sock *igmp, struct ip *ip_hdr,
struct in_addr from, const char *from_str,
char *igmp_msg, int igmp_msg_len);
-int igmp_mtrace_recv_response(struct igmp_sock *igmp, struct ip *ip_hdr,
+int igmp_mtrace_recv_response(struct gm_sock *igmp, struct ip *ip_hdr,
struct in_addr from, const char *from_str,
char *igmp_msg, int igmp_msg_len);
}
}
-int igmp_v2_recv_report(struct igmp_sock *igmp, struct in_addr from,
+int igmp_v2_recv_report(struct gm_sock *igmp, struct in_addr from,
const char *from_str, char *igmp_msg, int igmp_msg_len)
{
struct interface *ifp = igmp->interface;
return 0;
}
-int igmp_v2_recv_leave(struct igmp_sock *igmp, struct ip *ip_hdr,
+int igmp_v2_recv_leave(struct gm_sock *igmp, struct ip *ip_hdr,
const char *from_str, char *igmp_msg, int igmp_msg_len)
{
struct interface *ifp = igmp->interface;
struct in_addr group_addr,
int query_max_response_time_dsec);
-int igmp_v2_recv_report(struct igmp_sock *igmp, struct in_addr from,
+int igmp_v2_recv_report(struct gm_sock *igmp, struct in_addr from,
const char *from_str, char *igmp_msg, int igmp_msg_len);
-int igmp_v2_recv_leave(struct igmp_sock *igmp, struct ip *ip_hdr,
+int igmp_v2_recv_leave(struct gm_sock *igmp, struct ip *ip_hdr,
const char *from_str, char *igmp_msg, int igmp_msg_len);
#endif /* PIM_IGMPV2_H */
static inline long igmp_gmi_msec(struct gm_group *group)
{
struct pim_interface *pim_ifp = group->interface->info;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct listnode *sock_node;
long qrv = 0, qqi = 0;
return src;
}
-static void allow(struct igmp_sock *igmp, struct in_addr from,
+static void allow(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
} /* scan received sources */
}
-void igmpv3_report_isin(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_isin(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
group_exclude_fwd_anysrc_ifempty(group);
}
-void igmpv3_report_isex(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_isex(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources, int from_igmp_v2_report)
{
group_query_send(group);
}
-void igmpv3_report_toin(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_toin(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
}
}
-void igmpv3_report_toex(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_toex(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
igmp_group_reset_gmi(group);
}
-void igmpv3_report_allow(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_allow(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
{
struct interface *ifp = group->interface;
struct pim_interface *pim_ifp = ifp->info;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct listnode *sock_node;
for (ALL_LIST_ELEMENTS_RO(pim_ifp->socket_list, sock_node, igmp)) {
}
}
-void igmpv3_report_block(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_block(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources)
{
}
}
-void igmp_v3_recv_query(struct igmp_sock *igmp, const char *from_str,
+void igmp_v3_recv_query(struct gm_sock *igmp, const char *from_str,
char *igmp_msg)
{
struct interface *ifp;
} /* s_flag is clear: timer updates */
}
-int igmp_v3_recv_report(struct igmp_sock *igmp, struct in_addr from,
+int igmp_v3_recv_report(struct gm_sock *igmp, struct in_addr from,
const char *from_str, char *igmp_msg, int igmp_msg_len)
{
int num_groups;
void igmp_source_delete(struct gm_source *source);
void igmp_source_delete_expired(struct list *source_list);
-void igmpv3_report_isin(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_isin(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources);
-void igmpv3_report_isex(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_isex(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources, int from_igmp_v2_report);
-void igmpv3_report_toin(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_toin(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources);
-void igmpv3_report_toex(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_toex(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources);
-void igmpv3_report_allow(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_allow(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources);
-void igmpv3_report_block(struct igmp_sock *igmp, struct in_addr from,
+void igmpv3_report_block(struct gm_sock *igmp, struct in_addr from,
struct in_addr group_addr, int num_sources,
struct in_addr *sources);
uint8_t querier_robustness_variable,
uint16_t querier_query_interval);
-void igmp_v3_recv_query(struct igmp_sock *igmp, const char *from_str,
+void igmp_v3_recv_query(struct gm_sock *igmp, const char *from_str,
char *igmp_msg);
-int igmp_v3_recv_report(struct igmp_sock *igmp, struct in_addr from,
+int igmp_v3_recv_report(struct gm_sock *igmp, struct in_addr from,
const char *from_str, char *igmp_msg, int igmp_msg_len);
#endif /* PIM_IGMPV3_H */
const struct ip *ip_hdr;
const struct igmpmsg *msg;
struct in_addr ifaddr;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
const struct prefix *connected_src;
if (buf_size < (int)sizeof(struct ip))
* This function propagates the reconfiguration to every active socket
* for that interface.
*/
-static void igmp_sock_query_interval_reconfig(struct igmp_sock *igmp)
+static void igmp_sock_query_interval_reconfig(struct gm_sock *igmp)
{
struct interface *ifp;
struct pim_interface *pim_ifp;
igmp_startup_mode_on(igmp);
}
-static void igmp_sock_query_reschedule(struct igmp_sock *igmp)
+static void igmp_sock_query_reschedule(struct gm_sock *igmp)
{
if (igmp->mtrace_only)
return;
int query_interval)
{
struct listnode *sock_node;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
pim_ifp->default_query_interval = query_interval;
int query_max_response_time_dsec)
{
struct listnode *sock_node;
- struct igmp_sock *igmp;
+ struct gm_sock *igmp;
struct listnode *grp_node;
struct gm_group *grp;