Subject: [magma] Some comments on RFC 3678

From: Stig Venaas <[email-masked]>
Date: Sun, 19 Sep 2004 17:20:41 +0200

I have some comments and questions regarding RFC 3678.

First regarding setsourcefilter(). It's defined as

     int setsourcefilter(int s, uint32_t interface,
                         struct sockaddr *group, socklen_t grouplen,
                         uint32_t fmode, uint_t numsrc,
                         struct sockaddr_storage *slist);

numsrc is of type uint_t, but is this really a valid type? At least
AFAICS from the Single UNIX Specification size must be specified.
Shouldn't it be uint32_t? In the IPv4 version uint32_t is used and
believe they should be the same. Similar problem with the get
function.

I feel setsourcefilter() is a bit underspecified. My main question is
whether it's ok to call it with numsrc == 0. This could be useful for
traditional ASM behaviour (no sources blocked). If it is, must fmode
be MCAST_EXCLUDE, or is MCAST_INCLUDE also ok?

I assume that if the call fails (say one source address is in some
way invalid) and it returns -1, then the call should have absolutely
no effect, correct?

Should the setsourcefilter() call be atomic? When using exclude, is
it possible that the application will receive some packets from a
to be blocked source? If setsourcefilter() is implemented using the
delta API and one needs to join group before blocking sources, this
might happen. See below.

Then I have some questions regarding the delta API and blocking.

First, is it necessary to join the group (MCAST_JOIN_GROUP) before
blocking sources? I think it's a reasonable requirement, but it
doesn't say. One could however see some possible use for blocking a
source before joining the group.

Second, is all state removed when leaving the group
(MCAST_LEAVE_GROUP), or must each source be unblocked before or
after?

Stig

_______________________________________________
magma mailing list
[email-masked]
https://www1.ietf.org/mailman/listinfo/magma