11573Srgrimes#!/usr/bin/python
21573Srgrimes#
31573Srgrimes# multicast_send.py
41573Srgrimes#
51573Srgrimes# Multicast test with PicoTCP sending and Linux receiving
61573Srgrimes#
71573Srgrimes# (sender)                         (Receiver)
8227753Stheraven# PicoTCP ------------------------ Linux
9227753Stheraven#            mcast to 224.7.7.7
10227753Stheraven#
11227753Stheraven
12227753Stheravenfrom  topology import *
131573Srgrimesimport socket, random, string, struct
141573Srgrimes
151573SrgrimesIF_ADDR = '172.16.1.1'
161573SrgrimesLINK_ADDR = '172.16.1.2'
171573SrgrimesMCAST_ADDR = '224.7.7.7'
181573SrgrimesLISTEN_PORT = 6667
191573SrgrimesSENDTO_PORT = 6667
201573SrgrimesMCASTSEND = "mcastsend:" + str(LINK_ADDR) + ":" + str(MCAST_ADDR) + ":" + str(SENDTO_PORT) + ":" + str(LISTEN_PORT)
21249808Semaste
221573Srgrimesprint MCASTSEND
231573Srgrimes
241573SrgrimesT = Topology()
251573Srgrimesnet1 = Network(T, "pyt0")
261573Srgrimesh1 = Host(T, net1, args=MCASTSEND)
271573Srgrimes
281573Srgrimess_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
291573Srgrimess_udp.bind((MCAST_ADDR, LISTEN_PORT))
301573Srgrimess_udp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
311573Srgrimess_udp.settimeout(5);
321573Srgrimes
331573Srgrimesmreq = struct.pack("=4s4s", socket.inet_aton(str(MCAST_ADDR)), socket.inet_aton(str(IF_ADDR)))
341573Srgrimess_udp.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
351573Srgrimes
361573Srgrimesraw_input("Press enter to continue ...")
371573Srgrimesstart(T)
381573Srgrimessleep(1)
391573Srgrimes
401573Srgrimeswhile True:
4192986Sobrien  data = s_udp.recv(4096)
4292986Sobrien  #print data
431573Srgrimes  if 'end' in data:
441573Srgrimes    print '\n\n'
451573Srgrimes    print '+++++++++++++++++++++++++++++++++++++++++++++'
46227753Stheraven    print '+++++ multicast_send test IS successful +++++'
471573Srgrimes    print '+++++++++++++++++++++++++++++++++++++++++++++'
4816586Sjraynard    print '\n\n'
49103012Stjr    cleanup()
501573Srgrimes    exit(0)
511573Srgrimes
521573Srgrimesprint '\n\n'
531573Srgrimesprint '+++++++++++++++++++++++++++++++++++++++++++++'
541573Srgrimesprint '+++++ multicast_send test NOT successful ++++'
55227753Stheravenprint '+++++++++++++++++++++++++++++++++++++++++++++'
561573Srgrimesprint '\n\n'
571573Srgrimescleanup()
581573Srgrimesexit(1)
59227753Stheraven