summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/ip_multi.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/inet/ip_multi.h')
-rw-r--r--usr/src/uts/common/inet/ip_multi.h100
1 files changed, 35 insertions, 65 deletions
diff --git a/usr/src/uts/common/inet/ip_multi.h b/usr/src/uts/common/inet/ip_multi.h
index 7dee133967..c41ef99e3e 100644
--- a/usr/src/uts/common/inet/ip_multi.h
+++ b/usr/src/uts/common/inet/ip_multi.h
@@ -49,18 +49,9 @@ typedef enum {
} ilg_stat_t;
/*
- * Flags shared via ips_mrt_flags, used by mcast_restart_timers_thread().
- */
-typedef enum {
- IP_MRT_STOP = 0x1, /* request to stop thread */
- IP_MRT_DONE = 0x2, /* indication that thread is stopped */
- IP_MRT_RUN = 0x4 /* request to restart timers */
-} ip_mrt_flags_t;
-
-/*
* Extern functions
*/
-extern mblk_t *igmp_input(queue_t *, mblk_t *, ill_t *);
+extern mblk_t *igmp_input(mblk_t *, ip_recv_attr_t *);
extern void igmp_joingroup(ilm_t *);
extern void igmp_leavegroup(ilm_t *);
extern void igmp_slowtimo(void *);
@@ -73,85 +64,64 @@ extern void mld_statechange(ilm_t *, mcast_record_t, slist_t *);
extern void mld_slowtimo(void *);
extern void ilg_delete_all(conn_t *connp);
-extern ilg_t *ilg_lookup_ill_v6(conn_t *, const in6_addr_t *,
- ill_t *);
-extern ilg_t *ilg_lookup_ill_withsrc(conn_t *, ipaddr_t, ipaddr_t,
- ill_t *);
-extern ilg_t *ilg_lookup_ill_withsrc_v6(conn_t *, const in6_addr_t *,
- const in6_addr_t *, ill_t *);
+extern boolean_t conn_hasmembers_ill_withsrc_v4(conn_t *, ipaddr_t,
+ ipaddr_t, ill_t *);
+extern boolean_t conn_hasmembers_ill_withsrc_v6(conn_t *,
+ const in6_addr_t *, const in6_addr_t *, ill_t *);
extern void ill_leave_multicast(ill_t *);
extern void ill_recover_multicast(ill_t *);
-extern int ip_get_dlpi_mbcast(ill_t *, mblk_t *);
-
-extern void ilm_free(ipif_t *);
-extern ilm_t *ilm_lookup_ill(ill_t *, ipaddr_t, zoneid_t);
-extern ilm_t *ilm_lookup_ill_v6(ill_t *, const in6_addr_t *,
- boolean_t, zoneid_t);
-extern ilm_t *ilm_lookup_ipif(ipif_t *, ipaddr_t);
-
-extern int ilm_numentries_v6(ill_t *, const in6_addr_t *);
-extern int ilm_walk_ipif(ipif_t *);
-extern int ilm_walk_ill(ill_t *);
-extern void ilm_walker_cleanup(ill_t *);
-extern int ip_ll_send_disabmulti_req(ill_t *, const in6_addr_t *);
-extern int ip_ll_send_enabmulti_req(ill_t *, const in6_addr_t *);
-
-extern int ip_addmulti(ipaddr_t, ipif_t *, ilg_stat_t,
- mcast_record_t, slist_t *);
-extern int ip_addmulti_v6(const in6_addr_t *, ill_t *,
- zoneid_t, ilg_stat_t, mcast_record_t, slist_t *);
-extern int ip_delmulti(ipaddr_t, ipif_t *, boolean_t, boolean_t);
-extern int ip_delmulti_v6(const in6_addr_t *, ill_t *,
- zoneid_t, boolean_t, boolean_t);
+extern void ip_dlur_to_mhi(ill_t *, mblk_t *,
+ struct mac_header_info_s *);
+
+/* These make up the data path interface used by ip_output and ip_input */
+extern boolean_t ill_hasmembers_v4(ill_t *, ipaddr_t);
+extern boolean_t ill_hasmembers_v6(ill_t *, const in6_addr_t *);
+extern boolean_t ill_hasmembers_otherzones_v4(ill_t *, ipaddr_t,
+ zoneid_t);
+extern boolean_t ill_hasmembers_otherzones_v6(ill_t *,
+ const in6_addr_t *, zoneid_t);
+extern zoneid_t ill_hasmembers_nextzone_v4(ill_t *, ipaddr_t, zoneid_t);
+extern zoneid_t ill_hasmembers_nextzone_v6(ill_t *, const in6_addr_t *,
+ zoneid_t);
+
+extern ilm_t *ip_addmulti(const in6_addr_t *, ill_t *, zoneid_t,
+ int *);
+extern int ip_delmulti(ilm_t *);
+extern int ip_mforward(mblk_t *, ip_recv_attr_t *);
+extern void ip_mroute_decap(mblk_t *, ip_recv_attr_t *);
extern int ill_join_allmulti(ill_t *);
extern void ill_leave_allmulti(ill_t *);
extern int ip_join_allmulti(uint_t, boolean_t, ip_stack_t *);
extern int ip_leave_allmulti(uint_t, boolean_t, ip_stack_t *);
extern void ip_purge_allmulti(ill_t *);
-extern void ip_multicast_loopback(queue_t *, ill_t *, mblk_t *,
- int, zoneid_t);
-extern int ip_mforward(ill_t *, ipha_t *, mblk_t *);
-extern void ip_mroute_decap(queue_t *, mblk_t *, ill_t *);
extern int ip_mroute_mrt(mblk_t *, ip_stack_t *);
extern int ip_mroute_stats(mblk_t *, ip_stack_t *);
extern int ip_mroute_vif(mblk_t *, ip_stack_t *);
-extern int ip_mrouter_done(mblk_t *, ip_stack_t *);
-extern int ip_mrouter_get(int, queue_t *, uchar_t *);
-extern int ip_mrouter_set(int, queue_t *, int, uchar_t *, int,
- mblk_t *);
+extern int ip_mrouter_done(ip_stack_t *);
+extern int ip_mrouter_get(int, conn_t *, uchar_t *);
+extern int ip_mrouter_set(int, conn_t *, int, uchar_t *, int);
extern void ip_mrouter_stack_init(ip_stack_t *);
extern void ip_mrouter_stack_destroy(ip_stack_t *);
-extern int ip_opt_add_group(conn_t *, boolean_t, ipaddr_t,
- ipaddr_t, uint_t *, mcast_record_t, ipaddr_t, mblk_t *);
-extern int ip_opt_delete_group(conn_t *, boolean_t, ipaddr_t,
- ipaddr_t, uint_t *, mcast_record_t, ipaddr_t, mblk_t *);
-extern int ip_opt_add_group_v6(conn_t *, boolean_t,
- const in6_addr_t *, int, mcast_record_t, const in6_addr_t *, mblk_t *);
-extern int ip_opt_delete_group_v6(conn_t *, boolean_t,
- const in6_addr_t *, int, mcast_record_t, const in6_addr_t *, mblk_t *);
+extern int ip_opt_add_group(conn_t *, boolean_t,
+ const in6_addr_t *, ipaddr_t, uint_t, mcast_record_t, const in6_addr_t *);
+extern int ip_opt_delete_group(conn_t *, boolean_t,
+ const in6_addr_t *, ipaddr_t, uint_t, mcast_record_t, const in6_addr_t *);
extern int mrt_ioctl(ipif_t *, sin_t *, queue_t *, mblk_t *,
ip_ioctl_cmd_t *, void *);
extern int ip_sioctl_msfilter(ipif_t *, sin_t *, queue_t *,
mblk_t *, ip_ioctl_cmd_t *, void *);
-extern int ip_extract_msfilter(queue_t *, mblk_t *,
- const ip_ioctl_cmd_t *, cmd_info_t *, ipsq_func_t);
extern int ip_copyin_msfilter(queue_t *, mblk_t *);
-extern void ip_wput_ctl(queue_t *, mblk_t *);
-
-extern int pim_input(queue_t *, mblk_t *, ill_t *);
-extern void reset_conn_ipif(ipif_t *);
-extern void reset_conn_ill(ill_t *);
+extern mblk_t *pim_input(mblk_t *, ip_recv_attr_t *);
+extern void update_conn_ill(ill_t *, ip_stack_t *);
extern void reset_mrt_ill(ill_t *);
extern void reset_mrt_vif_ipif(ipif_t *);
-extern void mcast_restart_timers_thread(ip_stack_t *);
+extern void igmp_start_timers(unsigned, ip_stack_t *);
+extern void mld_start_timers(unsigned, ip_stack_t *);
extern void ilm_inactive(ilm_t *);
-extern ilm_t *ilm_walker_start(ilm_walker_t *, ill_t *);
-extern ilm_t *ilm_walker_step(ilm_walker_t *, ilm_t *);
-extern void ilm_walker_finish(ilm_walker_t *);
#endif /* _KERNEL */