"""Demonstrates some best practices for specifying device ids when executing ngpf operations

"""
from ixnetwork_restpy import SessionAssistant


session_assistant = SessionAssistant(IpAddress='127.0.0.1', 
    UserName='admin', Password='<PASSWORD>',
    LogLevel=SessionAssistant.LOGLEVEL_INFO, 
    ClearConfig=True)
ixnetwork = session_assistant.Ixnetwork

# create a b2b ngpf scenario
vport_1 = ixnetwork.Vport.add().add().add()
print(vport_1)
vport_2 = ixnetwork.Vport.add()
topologies = ixnetwork.Topology.add(Vports=vport_1).add(Vports=vport_2)
ipv4_1 = topologies[0].DeviceGroup.add().Ethernet.add().Ipv4.add()
igmp_host = ipv4_1.IgmpHost.add()
ipv4_2 = topologies[1].DeviceGroup.add().Ethernet.add().Ipv4.add()
igmp_querier = ipv4_2.IgmpQuerier.add()

# set the port step on the address
address = ipv4_1.Address
print(address.Steps)
address.Steps.Step = '1.1.1.1'
assert(address.Steps.Step == '1.1.1.1')

# get device ids for two specific ip addresses
ipv4_device_ids = ipv4_1.get_device_ids(Address='^(%s|%s)' % (ipv4_1.Address.Values[6], ipv4_1.Address.Values[24]))
assert(len(ipv4_device_ids) == 2)

# get device ids on two specific ports
port_device_ids = ipv4_1.get_device_ids(PortNames='^(%s|%s)$' % (vport_1[0].Name, vport_1[2].Name))
assert(len(port_device_ids) == 20)

# get device ids for igmp v2 hosts on a specific port
v2_device_ids = igmp_host.get_device_ids(PortNames='(?i)^%s$' % (vport_1[1].Name), VersionType='(?i)version2')
assert(len(v2_device_ids) == 10)

# stop all devices
ipv4_1.Stop()

# start only a few devices
ipv4_1.Start(ipv4_device_ids)

# leave
igmp_host.IgmpMcastIPv4GroupList.IgmpLeaveGroup("1-4;6")

# issue a join on only a few devices
igmp_host.IgmpMcastIPv4GroupList.Join(v2_device_ids)




