1#!/usr/bin/python
2import socket, struct, os, signal, sys
3# -*- coding: utf-8 -*-
4
5"""
6Script used to join machine into multicast groups.
7
8@author Amos Kong <akong@redhat.com>
9"""
10
11if __name__ == "__main__":
12    if len(sys.argv) < 4:
13        print """%s [mgroup_count] [prefix] [suffix]
14        mgroup_count: count of multicast addresses
15        prefix: multicast address prefix
16        suffix: multicast address suffix""" % sys.argv[0]
17        sys.exit()
18
19    mgroup_count = int(sys.argv[1])
20    prefix = sys.argv[2]
21    suffix = int(sys.argv[3])
22
23    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
24    for i in range(mgroup_count):
25        mcast = prefix + "." + str(suffix + i)
26        try:
27            mreq = struct.pack("4sl", socket.inet_aton(mcast),
28                               socket.INADDR_ANY)
29            s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
30        except:
31            s.close()
32            print "Could not join multicast: %s" % mcast
33            raise
34
35    print "join_mcast_pid:%s" % os.getpid()
36    os.kill(os.getpid(), signal.SIGSTOP)
37    s.close()
38