Download presentation
Presentation is loading. Please wait.
Published byJack Howard Modified over 8 years ago
1
Multicast Source Filter API draft-ietf-idmr-msf-api-00.txt Dave Thaler (Microsoft) Bill Fenner (AT&T Research) Bob Quinn (Stardust.com)
2
Goals Express multicast source filters for IPv4 and IPv6 Provide version-independent API not present in RFC 2553 Basic (delta-based) version for most uses Advanced version for large atomic operations, switching modes, etc. Minimize changes to existing API
3
Existing IPv4 Multicast API struct ip_mreq { struct in_addr imr_multiaddr; /* IP multicast address of group */ struct in_addr imr_interface; /* local IP address of interface */ }; socket options : IP_{ADD,DROP}_MEMBERSHIP
4
Semantics of Existing API “Delta”-based –To join/leave a set of (sub)set of groups, call API once for each group to join or leave NOT “final-state” based (don’t specify new set of groups to be joined to) Often join multiple groups (e.g., different media), but this is not a problem
5
Structure for new IPv4 basic operations struct ip_mreq_source { struct in_addr imr_multiaddr; /* group address */ struct in_addr imr_sourceaddr;/* source address */ struct in_addr imr_interface; /* iface address*/ };
6
Socket Operations (setsockopt) IP_{ADD,DROP}_SOURCE_MEMBERSHIP - for inclusion list changes IP_{ADD,DROP}_MEMBERSHIP - existing API for exclude mode IP_{ALLOW,BLOCK}_SOURCE - for exclusion list changes
7
Semantics of Basic API For source-inclusion, just do IP_ADD_SOURCE_MEMBERSHIP per source For source-exclusion, do IP_ADD_MEMBERSHIP, and IP_DROP_SOURCE_MEMBERSHIP per source Functionally equivalent to abstract API Always delta-based so more consistent with existing API
8
Advanced API Basic API doesn’t let app switch modes without leaving group Basic API is very inefficient with large source lists Advanced API is final-state based: just set the complete filter
9
Structure for advanced IPv4 operations struct ip_msfilter { struct in_addr imsf_multiaddr; /* group address */ struct in_addr imsf_interface; /* iface address */ uint32_t imsf_fmode; /* filter mode */ uint32_t imsf_numsrc; /* # sources */ struct in_addr imsf_slist[1]; /* source list */ }; #define IP_MSFILTER_SIZE(numsrc)... (size of buffer with numsrc sources in list) fmode=MCAST_{INCLUDE,EXCLUDE}
10
Socket Operations setsockopt: – IP_MULTICAST_FILTER ioctl: – SIO_GET_MULTICAST_FILTER Open issue: change set to ioctl SIO_SET_MULTICAST_FILTER?
11
Protocol-Independent API E.g. Resolve DNS name to sockaddr Could be v4 or v6, want to use same API in spirit of RFC 2553 Just need to use structures containing sockaddr_storage instead of addresses Use indices to identify interfaces (not addresses!) as in current IPv6-specific API.
12
Basic Structures struct ip_mcast_req { uint32_t imr_interface; struct sockaddr_storage imr_group; }; struct ip_mcast_source_req { uint32_t imsr_interface; struct sockaddr_storage imsr_group; struct sockaddr_storage imsr_source; };
13
Advanced Structure struct ip_mcast_filter { uint32_t imf_interface; struct sockaddr_storage imf_group; uint32_t imf_fmode; uint32_t imf_numsrc; struct sockaddr_storage imf_slist[1]; }; #define IP_MCAST_FILTER_SIZE(numsrc)... (size of buffer with numsrc sources)
14
Socket Operations setsockopt: –IP_{JOIN,LEAVE}_GROUP –IP_{JOIN,LEAVE}_GROUP_SOURCE –IP_{BLOCK,ALLOW}_SOURCE ioctl –SIO_{GET,SET}_MULTICAST_FILTER
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.