[Twisted-Python] Source specific multicasting (SSM) example?
Hi, there. I was wondering if there is any information or examples on how to use Twisted to perform a SSM operation. I am new to Twisted and to Python. In C, I believe one would use the setsocketopt() to specify the joining to a multicast group (G) to a specific source (S): setsockopt(sock,..., IP_ADD_SOURCE_MEMBERSHIP, (S, G, iface), ...) I believe that Python itself has analogous socket calls and could do this using a UDP socket. I read the Multicast UDP example on Twisted here: http://stderr.org/doc/twisted-doc/howto/udp.html#auto3 This shows how to do a normal multicast UDP situation with Twisted (i.e. a process will receive UDP traffic from ALL sources registered to the IGMP group). So, if there were UDP three sources (e.g. A, B, and C) registered to the IGMP group, I would like to find a way for my client to only receive data from source B. I believe that I can get information using a SDP/SAP using a simple UDP server listening on the appropriate port. So, the only thing that I am missing is how to register to a group for a specific source. I am not sure if the joinGroup() method will allow for this. Thanks. -Rodney Lott
Rodney Lott wrote:
Hi, there.
I was wondering if there is any information or examples on how to use Twisted to perform a SSM operation. I am new to Twisted and to Python.
In C, I believe one would use the setsocketopt() to specify the joining to a multicast group (G) to a specific source (S):
setsockopt(sock,…, IP_ADD_SOURCE_MEMBERSHIP, (S, G, iface), …)
...provided your OS has IGMPv3 support (and the underlying network has IGMPv3 and PIM-SSM setup).
I believe that Python itself has analogous socket calls and could do this using a UDP socket.
At least on my version of Python (2.5.1, Fedora 8) there's no constant in the "socket" module for that:
[x for x in dir(socket) if 'member' in x.lower()] ['IP_ADD_MEMBERSHIP', 'IP_DROP_MEMBERSHIP', 'IP_MAX_MEMBERSHIPS']
Google for "python igmpv3" does not look promising... It seems as if this support isn't there yet.
I read the Multicast UDP example on Twisted here: http://stderr.org/doc/twisted-doc/howto/udp.html#auto3
This shows how to do a normal multicast UDP situation with Twisted (i.e. a process will receive UDP traffic from ALL sources registered to the IGMP group).
So, if there were UDP three sources (e.g. A, B, and C) registered to the IGMP group, I would like to find a way for my client to only receive data from source B.
I believe that I can get information using a SDP/SAP using a simple UDP server listening on the appropriate port. So, the only thing that I am missing is how to register to a group for a specific source. I am not sure if the joinGroup() method will allow for this.
Thanks.
-Rodney Lott
------------------------------------------------------------------------
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
Thanks for the information, Phil. I believe the 2.6 kernels are supposed to have IGMP setup. Not sure about the PIM-SSM, though. My Python setup (Debian etch, python 2.4.4-2) shows similar to yours re. the socket module. Yeah. I sent a post here because my Googling for this stuff wasn't going anywhere. Oh, well. Not the end of the world. I will just use separate IGMP groups and switch on the separate addresses. -Rodney Lott -----Original Message----- From: twisted-python-bounces@twistedmatrix.com [mailto:twisted-python-bounces@twistedmatrix.com]On Behalf Of Phil Mayers Sent: Friday, April 04, 2008 12:41 PM To: Twisted general discussion Subject: Re: [Twisted-Python] Source specific multicasting (SSM) example? Rodney Lott wrote:
Hi, there.
I was wondering if there is any information or examples on how to use Twisted to perform a SSM operation. I am new to Twisted and to Python.
In C, I believe one would use the setsocketopt() to specify the joining to a multicast group (G) to a specific source (S):
setsockopt(sock,…, IP_ADD_SOURCE_MEMBERSHIP, (S, G, iface), …)
...provided your OS has IGMPv3 support (and the underlying network has IGMPv3 and PIM-SSM setup).
I believe that Python itself has analogous socket calls and could do this using a UDP socket.
At least on my version of Python (2.5.1, Fedora 8) there's no constant in the "socket" module for that:
[x for x in dir(socket) if 'member' in x.lower()] ['IP_ADD_MEMBERSHIP', 'IP_DROP_MEMBERSHIP', 'IP_MAX_MEMBERSHIPS']
Google for "python igmpv3" does not look promising... It seems as if this support isn't there yet.
I read the Multicast UDP example on Twisted here: http://stderr.org/doc/twisted-doc/howto/udp.html#auto3
This shows how to do a normal multicast UDP situation with Twisted (i.e. a process will receive UDP traffic from ALL sources registered to the IGMP group).
So, if there were UDP three sources (e.g. A, B, and C) registered to the IGMP group, I would like to find a way for my client to only receive data from source B.
I believe that I can get information using a SDP/SAP using a simple UDP server listening on the appropriate port. So, the only thing that I am missing is how to register to a group for a specific source. I am not sure if the joinGroup() method will allow for this.
Thanks.
-Rodney Lott
------------------------------------------------------------------------
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
Rodney Lott wrote:
Thanks for the information, Phil.
I believe the 2.6 kernels are supposed to have IGMP setup. Not sure about the PIM-SSM, though.
I don't think Linux 2.6 has IGMPv3 yes (necessary for SSM). I think it just has IGMPv2/1 PIM-SSM is a routing protocol and is only necessary on the routers in your or your providers network Even if your network is plain ASM (any-source multicast) capable, there's a good chance it's not enabled for SSM. Of course, it may be e.g. ours is.
My Python setup (Debian etch, python 2.4.4-2) shows similar to yours re. the socket module.
Yeah. I sent a post here because my Googling for this stuff wasn't going anywhere. Oh, well. Not the end of the world. I will just use separate IGMP groups and switch on the separate addresses.
-Rodney Lott
-----Original Message----- From: twisted-python-bounces@twistedmatrix.com [mailto:twisted-python-bounces@twistedmatrix.com]On Behalf Of Phil Mayers Sent: Friday, April 04, 2008 12:41 PM To: Twisted general discussion Subject: Re: [Twisted-Python] Source specific multicasting (SSM) example?
Rodney Lott wrote:
Hi, there.
I was wondering if there is any information or examples on how to use Twisted to perform a SSM operation. I am new to Twisted and to Python.
In C, I believe one would use the setsocketopt() to specify the joining to a multicast group (G) to a specific source (S):
setsockopt(sock,…, IP_ADD_SOURCE_MEMBERSHIP, (S, G, iface), …)
...provided your OS has IGMPv3 support (and the underlying network has IGMPv3 and PIM-SSM setup).
I believe that Python itself has analogous socket calls and could do this using a UDP socket.
At least on my version of Python (2.5.1, Fedora 8) there's no constant in the "socket" module for that:
[x for x in dir(socket) if 'member' in x.lower()] ['IP_ADD_MEMBERSHIP', 'IP_DROP_MEMBERSHIP', 'IP_MAX_MEMBERSHIPS']
Google for "python igmpv3" does not look promising... It seems as if this support isn't there yet.
I read the Multicast UDP example on Twisted here: http://stderr.org/doc/twisted-doc/howto/udp.html#auto3
This shows how to do a normal multicast UDP situation with Twisted (i.e. a process will receive UDP traffic from ALL sources registered to the IGMP group).
So, if there were UDP three sources (e.g. A, B, and C) registered to the IGMP group, I would like to find a way for my client to only receive data from source B.
I believe that I can get information using a SDP/SAP using a simple UDP server listening on the appropriate port. So, the only thing that I am missing is how to register to a group for a specific source. I am not sure if the joinGroup() method will allow for this.
Thanks.
-Rodney Lott
------------------------------------------------------------------------
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
participants (2)
-
Phil Mayers -
Rodney Lott