71498f308b
and protocol-independent host mode multicast. The code is written to accomodate IPv6, IGMPv3 and MLDv2 with only a little additional work. This change only pertains to FreeBSD's use as a multicast end-station and does not concern multicast routing; for an IGMPv3/MLDv2 router implementation, consider the XORP project. The work is based on Wilbert de Graaf's IGMPv3 code drop for FreeBSD 4.6, which is available at: http://www.kloosterhof.com/wilbert/igmpv3.html Summary * IPv4 multicast socket processing is now moved out of ip_output.c into a new module, in_mcast.c. * The in_mcast.c module implements the IPv4 legacy any-source API in terms of the protocol-independent source-specific API. * Source filters are lazy allocated as the common case does not use them. They are part of per inpcb state and are covered by the inpcb lock. * struct ip_mreqn is now supported to allow applications to specify multicast joins by interface index in the legacy IPv4 any-source API. * In UDP, an incoming multicast datagram only requires that the source port matches the 4-tuple if the socket was already bound by source port. An unbound socket SHOULD be able to receive multicasts sent from an ephemeral source port. * The UDP socket multicast filter mode defaults to exclusive, that is, sources present in the per-socket list will be blocked from delivery. * The RFC 3678 userland functions have been added to libc: setsourcefilter, getsourcefilter, setipv4sourcefilter, getipv4sourcefilter. * Definitions for IGMPv3 are merged but not yet used. * struct sockaddr_storage is now referenced from <netinet/in.h>. It is therefore defined there if not already declared in the same way as for the C99 types. * The RFC 1724 hack (specify 0.0.0.0/8 addresses to IP_MULTICAST_IF which are then interpreted as interface indexes) is now deprecated. * A patch for the Rhyolite.com routed in the FreeBSD base system is available in the -net archives. This only affects individuals running RIPv1 or RIPv2 via point-to-point and/or unnumbered interfaces. * Make IPv6 detach path similar to IPv4's in code flow; functionally same. * Bump __FreeBSD_version to 700048; see UPDATING. This work was financially supported by another FreeBSD committer. Obtained from: p4://bms_netdev Submitted by: Wilbert de Graaf (original work) Reviewed by: rwatson (locking), silence from fenner, net@ (but with encouragement)
169 lines
2.7 KiB
Plaintext
169 lines
2.7 KiB
Plaintext
/*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
FBSD_1.0 {
|
|
__b64_ntop;
|
|
__b64_pton;
|
|
ether_line;
|
|
ether_aton;
|
|
ether_aton_r;
|
|
ether_ntoa;
|
|
ether_ntoa_r;
|
|
ether_ntohost;
|
|
ether_hostton;
|
|
eui64_aton;
|
|
eui64_ntoa;
|
|
eui64_ntohost;
|
|
eui64_hostton;
|
|
gai_strerror;
|
|
freeaddrinfo;
|
|
getaddrinfo;
|
|
gethostent;
|
|
gethostent_r;
|
|
gethostbyname;
|
|
gethostbyname_r;
|
|
gethostbyname2;
|
|
gethostbyname2_r;
|
|
gethostbyaddr;
|
|
gethostbyaddr_r;
|
|
sethostent;
|
|
endhostent;
|
|
getifaddrs;
|
|
freeifaddrs;
|
|
getifmaddrs;
|
|
freeifmaddrs;
|
|
getnameinfo;
|
|
getnetent;
|
|
getnetent_r;
|
|
getnetbyname;
|
|
getnetbyname_r;
|
|
getnetbyaddr;
|
|
getnetbyaddr_r;
|
|
setnetent;
|
|
endnetent;
|
|
getprotobynumber;
|
|
getprotobynumber_r;
|
|
setprotoent;
|
|
endprotoent;
|
|
getprotoent;
|
|
getprotoent_r;
|
|
getprotobyname;
|
|
getprotobyname_r;
|
|
getservbyname;
|
|
getservbyname_r;
|
|
getservbyport;
|
|
getservbyport_r;
|
|
setservent;
|
|
endservent;
|
|
getservent;
|
|
getservent_r;
|
|
hesiod_init;
|
|
hesiod_end;
|
|
hesiod_to_bind;
|
|
hesiod_resolve;
|
|
hesiod_free_list;
|
|
hes_init;
|
|
hes_to_bind;
|
|
hes_resolve;
|
|
hes_error;
|
|
hes_free;
|
|
if_indextoname;
|
|
if_nameindex;
|
|
if_freenameindex;
|
|
if_nametoindex;
|
|
inet6_option_space;
|
|
inet6_option_init;
|
|
inet6_option_append;
|
|
inet6_option_alloc;
|
|
inet6_option_next;
|
|
inet6_option_find;
|
|
inet6_opt_init;
|
|
inet6_opt_append;
|
|
inet6_opt_finish;
|
|
inet6_opt_set_val;
|
|
inet6_opt_next;
|
|
inet6_opt_find;
|
|
inet6_opt_get_val;
|
|
link_addr;
|
|
link_ntoa;
|
|
getipnodebyname;
|
|
getipnodebyaddr;
|
|
freehostent;
|
|
__nsdefaultsrc;
|
|
_nsdbtaddsrc;
|
|
_nsdbtdump;
|
|
_nsdbtput;
|
|
nsdispatch;
|
|
rcmd;
|
|
rcmd_af;
|
|
rresvport;
|
|
rresvport_af;
|
|
ruserok;
|
|
iruserok;
|
|
iruserok_sa;
|
|
rcmdsh;
|
|
recv;
|
|
inet6_rthdr_space;
|
|
inet6_rthdr_init;
|
|
inet6_rthdr_add;
|
|
inet6_rthdr_lasthop;
|
|
inet6_rthdr_segments;
|
|
inet6_rthdr_getaddr;
|
|
inet6_rthdr_getflags;
|
|
inet6_rth_space;
|
|
inet6_rth_init;
|
|
inet6_rth_add;
|
|
inet6_rth_reverse;
|
|
inet6_rth_segments;
|
|
inet6_rth_getaddr;
|
|
send;
|
|
sockatmark;
|
|
in6addr_any;
|
|
in6addr_loopback;
|
|
in6addr_nodelocal_allnodes;
|
|
in6addr_linklocal_allnodes;
|
|
sctp_getaddrlen;
|
|
sctp_bindx;
|
|
sctp_connectx;
|
|
sctp_peeloff;
|
|
sctp_opt_info;
|
|
sctp_getpaddrs;
|
|
sctp_freepaddrs;
|
|
sctp_getladdrs;
|
|
sctp_freeladdrs;
|
|
sctp_sendmsg;
|
|
sctp_sendmsgx;
|
|
sctp_send;
|
|
sctp_sendx;
|
|
sctp_recvmsg;
|
|
setipv4sourcefilter;
|
|
getipv4sourcefilter;
|
|
getsourcefilter;
|
|
setsourcefilter;
|
|
};
|
|
|
|
FBSDprivate_1.0 {
|
|
_nsdispatch;
|
|
_nsyyerror; /* generated from nslexer.l */
|
|
_nsyylex; /* generated from nslexer.l */
|
|
_nsyyparse; /* generated from nsparser.y */
|
|
_nsyylineno; /* generated from nsparser.y */
|
|
__dns_getanswer;
|
|
__ivaliduser;
|
|
__ivaliduser_af;
|
|
__ivaliduser_sa;
|
|
__check_rhosts_file;
|
|
__rcmd_errstr;
|
|
__nss_compat_getgrnam_r;
|
|
__nss_compat_getgrgid_r;
|
|
__nss_compat_getgrent_r;
|
|
__nss_compat_setgrent;
|
|
__nss_compat_endgrent;
|
|
__nss_compat_getpwnam_r;
|
|
__nss_compat_getpwuid_r;
|
|
__nss_compat_getpwent_r;
|
|
__nss_compat_setpwent;
|
|
__nss_compat_endpwent;
|
|
};
|