-struct in_multi *in_addmulti(struct in_addr *, struct ifnet *);
-void in_delmulti(struct in_multi **);
-int in_control(struct socket *, u_long, caddr_t, struct ifnet *,
- struct proc *);
-void in_rtqdrain(void);
-void ip_input(struct mbuf *);
-int in_ifadown(struct ifaddr *ifa, int);
-void in_ifscrub(struct ifnet *, struct in_ifaddr *, int);
-int ipflow_fastforward(struct mbuf *);
-void ipflow_create(const struct route *, struct mbuf *);
-void ipflow_slowtimo(void);
-
-#endif /* KERNEL_PRIVATE */
+struct ip_moptions;
+
+/*
+ * Return values for imo_multi_filter().
+ */
+#define MCAST_PASS 0 /* Pass */
+#define MCAST_NOTGMEMBER 1 /* This host not a member of group */
+#define MCAST_NOTSMEMBER 2 /* This host excluded source */
+#define MCAST_MUTED 3 /* [deprecated] */
+
+extern void in_ifaddr_init(void);
+extern int imo_multi_filter(const struct ip_moptions *, const struct ifnet *,
+ const struct sockaddr *, const struct sockaddr *);
+extern int imo_clone(struct ip_moptions *, struct ip_moptions *);
+extern void inm_commit(struct in_multi *);
+extern void inm_clear_recorded(struct in_multi *);
+extern void inm_print(const struct in_multi *);
+extern int inm_record_source(struct in_multi *inm, const in_addr_t);
+extern void inm_release(struct in_multi *);
+extern void in_multi_init(void);
+extern struct in_multi *in_addmulti(struct in_addr *, struct ifnet *);
+extern void in_delmulti(struct in_multi *);
+extern int in_leavegroup(struct in_multi *, /*const*/ struct in_mfilter *);
+extern int in_multi_detach(struct in_multi *);
+extern void inm_addref(struct in_multi *, int);
+extern void inm_remref(struct in_multi *, int);
+extern void inm_purge(struct in_multi *);
+extern uint8_t ims_get_mode(const struct in_multi *,
+ const struct ip_msource *, uint8_t);
+extern int in_control(struct socket *, u_long, caddr_t, struct ifnet *,
+ struct proc *);
+extern void in_rtqdrain(void);
+extern struct radix_node *in_validate(struct radix_node *);
+extern void ip_input(struct mbuf *);
+extern int in_ifadown(struct ifaddr *ifa, int);
+extern void in_ifscrub(struct ifnet *, struct in_ifaddr *, int);
+extern u_int32_t inaddr_hashval(u_int32_t);
+extern void in_purgeaddrs(struct ifnet *);
+extern void imf_leave(struct in_mfilter *);
+extern void imf_purge(struct in_mfilter *);
+
+struct inpcb;
+
+__private_extern__ int inp_join_group(struct inpcb *, struct sockopt *);
+__private_extern__ int inp_leave_group(struct inpcb *, struct sockopt *);
+__private_extern__ void in_multihead_lock_exclusive(void);
+__private_extern__ void in_multihead_lock_shared(void);
+__private_extern__ void in_multihead_lock_assert(int);
+__private_extern__ void in_multihead_lock_done(void);
+#endif /* XNU_KERNEL_PRIVATE */