예제 #1
0
파일: script.py 프로젝트: zhaojunhhu/TR069
def test_script(obj):
    """
    """
    sn = obj.sn # 取得SN号
    DeviceType = "VDSL"  # 绑定tr069模板类型.只支持ADSL\LAN\EPON三种
    AccessMode = 'PPPoE_Bridged'    # WAN接入模式,可选PPPoE_Bridge,PPPoE,DHCP,Static
    rollbacklist = []  # 存储工单失败时需回退删除的实例.目前缺省是不开启回退
    # 初始化日志
    obj.dict_ret.update(str_result=u"开始执行工单:%s........\n" %
                        os.path.basename(os.path.dirname(__file__)))
    
    # data传参
    PVC_OR_VLAN = obj.dict_data.get("PVC_OR_VLAN")[0]    # ADSL上行只关心PVC值,LAN和EPON上行则关心VLAN值
    X_CT_COM_LanInterface = obj.dict_data.get("X_CT_COM_LanInterface")[0]
    X_CT_COM_ServiceList = obj.dict_data.get("X_CT_COM_ServiceList")[0]
    WANEnable_Switch = obj.dict_data.get("WANEnable_Switch")[0]


    # 对X_CT_COM_LanInterface重新解析,兼容LAN1,lan1格式
    ret, X_CT_COM_LanInterface = ParseLANName(X_CT_COM_LanInterface)
    if ret == ERR_FAIL:
        info = u'输入的X_CT_COM_LanInterface参数错误'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)    
        return ret


    # WANDSLLinkConfig节点参数
    if PVC_OR_VLAN == "":
        PVC_OR_VLAN_flag = 0
    else:
        PVC_OR_VLAN_flag = 1
        
    dict_wanlinkconfig = {'Enable':[1, '1'],
                          'X_CT-COM_Mode':[PVC_OR_VLAN_flag, '2'],
                          'X_CT-COM_VLAN':[PVC_OR_VLAN_flag, PVC_OR_VLAN]}
    
    # WANPPPConnection节点参数
    # 注意:X_CT-COM_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    dict_wanpppconnection = {'Enable':[1, '1'],
                             'ConnectionType':[1, 'PPPoE_Bridged'], 
                             'Name':[0, 'Null'], 'Username':[0, 'Null'], 
                             'Password':[0, 'Null'],
                             'X_CT-COM_LanInterface':[1, X_CT_COM_LanInterface], 
                             'X_CT-COM_ServiceList':[1, X_CT_COM_ServiceList],
                             'X_CT-COM_LanInterface-DHCPEnable':[0, 'Null'], 
                             'X_CT-COM_IPMode':[0, 'Null']}
    
    # WANIPConnection节点参数
    dict_wanipconnection = {}
    
    # 开始执行WAN连接开通工单
    ret, ret_data = WANSetUP(obj, sn, WANEnable_Switch, DeviceType,
                       AccessMode, PVC_OR_VLAN, dict_wanlinkconfig,
                       dict_wanpppconnection, dict_wanipconnection,
                       rollbacklist=rollbacklist)
    
    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)
    
    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data_rollback)
    
    info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)    
    return ret
예제 #2
0
파일: script.py 프로젝트: zhaojunhhu/TR069
def test_script(obj):
    """
    """
    sn = obj.sn  # 取得SN号
    DeviceType = "LAN"  # 绑定tr069模板类型.只支持ADSL\LAN\EPON三种
    rollbacklist = []  # 存储工单失败时需回退删除的实例.目前缺省是不开启回退
    # 初始化日志
    obj.dict_ret.update(str_result=u"开始执行工单:%s........\n" %
                        os.path.basename(os.path.dirname(__file__)))

    # data传参
    PVC_OR_VLAN1 = obj.dict_data.get("PVC_OR_VLAN1")[
        0]  # ADSL上行只关心PVC值,LAN和EPON上行则关心VLAN值
    Username = obj.dict_data.get("Username")[0]
    Password = obj.dict_data.get("Password")[0]
    X_CT_COM_LanInterface1 = obj.dict_data.get("X_CT_COM_LanInterface1")[0]
    X_CT_COM_ServiceList1 = obj.dict_data.get("X_CT_COM_ServiceList1")[0]
    PVC_OR_VLAN2 = obj.dict_data.get("PVC_OR_VLAN2")[
        0]  # ADSL上行只关心PVC值,LAN和EPON上行则关心VLAN值
    X_CT_COM_MulticastVlan = obj.dict_data.get("X_CT_COM_MulticastVlan")[
        0]  # 新增公共组播VLAN的下发

    # 强制将使能动作与参数一起下发
    WANEnable_Switch = '1'
    AccessMode1 = 'PPPoE'  # WAN接入模式,可选PPPoE_Bridge,PPPoE,DHCP,Static
    AccessMode2 = 'PPPoE_Bridged'  # WAN接入模式,可选PPPoE_Bridge,PPPoE,DHCP,Static

    # 对X_CT_COM_LanInterface重新解析,兼容LAN1,lan1格式
    ret, X_CT_COM_LanInterface1 = ParseLANName(X_CT_COM_LanInterface1)
    if ret == ERR_FAIL:
        info = u'输入的X_CT_COM_LanInterface参数错误'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        return ret

    # IPTV节点参数
    dict_root = {
        'IGMPEnable': [1, '1'],
        'ProxyEnable': [0, 'Null'],
        'SnoopingEnable': [0, 'Null']
    }

    # WANDSLLinkConfig节点参数
    if PVC_OR_VLAN1 == "":
        PVC_OR_VLAN1_flag = 0
    else:
        PVC_OR_VLAN1_flag = 1

    dict_wanlinkconfig1 = {
        'X_CT-COM_Enable': [0, 'Null'],
        'X_CT-COM_Mode': [PVC_OR_VLAN1_flag, '2'],
        'X_CT-COM_VLANIDMark': [PVC_OR_VLAN1_flag, PVC_OR_VLAN1],
        'X_CT-COM_802-1pMark': [1, '0']
    }
    # WANDSLLinkConfig节点参数
    if PVC_OR_VLAN2 == "":
        PVC_OR_VLAN2_flag = 0
    else:
        PVC_OR_VLAN2_flag = 1

    dict_wanlinkconfig2 = {
        'X_CT-COM_Enable': [0, 'Null'],
        'X_CT-COM_Mode': [PVC_OR_VLAN2_flag, '2'],
        'X_CT-COM_VLANIDMark': [PVC_OR_VLAN2_flag, PVC_OR_VLAN2],
        'X_CT-COM_802-1pMark': [1, '0']
    }

    # WANPPPConnection节点参数
    # 注意:X_CT-COM_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    dict_wanpppconnection1 = {
        'Enable': [1, '1'],
        'ConnectionType': [1, 'IP_Routed'],
        'Name': [0, 'Null'],
        'Username': [1, Username],
        'Password': [1, Password],
        'X_CT-COM_LanInterface': [1, X_CT_COM_LanInterface1],
        'X_CT-COM_ServiceList': [1, X_CT_COM_ServiceList1],
        'X_CT-COM_LanInterface-DHCPEnable': [0, 'Null'],
        'X_CT-COM_IPMode': [0, 'Null'],
        'X_CT-COM_MulticastVlan': [0, 'Null']
    }

    # WANPPPConnection节点参数
    # 注意:X_CT-COM_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    LAN2 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2'  # 绑字到LAN2

    if X_CT_COM_MulticastVlan == "":
        X_CT_COM_MulticastVlan_flag = 0
    else:
        X_CT_COM_MulticastVlan_flag = 1

    dict_wanpppconnection2 = {
        'Enable': [1, '1'],
        'ConnectionType': [1, 'PPPoE_Bridged'],
        'Name': [0, 'Null'],
        'Username': [0, 'Null'],
        'Password': [0, 'Null'],
        'X_CT-COM_LanInterface': [1, LAN2],
        'X_CT-COM_ServiceList': [1, 'OTHER'],
        'X_CT-COM_LanInterface-DHCPEnable': [0, 'Null'],
        'X_CT-COM_IPMode': [0, 'Null'],
        'X_CT-COM_MulticastVlan':
        [X_CT_COM_MulticastVlan_flag, X_CT_COM_MulticastVlan]
    }

    # WANIPConnection节点参数
    dict_wanipconnection = {}

    # 查询或开通PPPoE的IP_Routed上网
    ret, ret_data = WANSetUP(obj,
                             sn,
                             WANEnable_Switch,
                             DeviceType,
                             AccessMode1,
                             PVC_OR_VLAN1,
                             dict_wanlinkconfig1,
                             dict_wanpppconnection1,
                             dict_wanipconnection,
                             change_account=0,
                             rollbacklist=rollbacklist)

    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)

    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        info = u'开通上网失败\n'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] +
                            ret_data_rollback)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        return ret

    # 开通PPPoE_Bridged的OTHER桥IPTV,并绑定到LAN2
    ret, ret_data = IPTVEnable(obj,
                               sn,
                               WANEnable_Switch,
                               DeviceType,
                               AccessMode2,
                               PVC_OR_VLAN2,
                               dict_root,
                               dict_wanlinkconfig2,
                               dict_wanpppconnection2,
                               dict_wanipconnection,
                               change_account=1,
                               rollbacklist=rollbacklist)

    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)

    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] +
                            ret_data_rollback)

    info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
    return ret
예제 #3
0
def test_script(obj):
    """
    """
    sn = obj.sn  # 取得SN号
    DeviceType = "VDSL"  # 绑定tr069模板类型.只支持ADSL\LAN\EPON三种
    AccessMode = 'DHCP'  # WAN接入模式,可选PPPoE_Bridge,PPPoE,DHCP,Static
    X_CT_COM_ServiceList = "TR069,INTERNET"  # WAN连接的服务模式,和以前的RF统一,写死 zsj 2014-6-26
    rollbacklist = []  # 存储工单失败时需回退删除的实例.目前缺省是不开启回退
    # 初始化日志
    obj.dict_ret.update(str_result=u"开始执行工单:%s........\n" %
                        os.path.basename(os.path.dirname(__file__)))

    # data传参
    PVC_OR_VLAN = obj.dict_data.get("PVC_OR_VLAN")[
        0]  # ADSL上行只关心PVC值,LAN和EPON上行则关心VLAN值
    X_CT_COM_LanInterface = obj.dict_data.get("X_CT_COM_LanInterface")[0]
    #X_CT_COM_ServiceList = obj.dict_data.get("X_CT_COM_ServiceList")[0]
    WANEnable_Switch = obj.dict_data.get("WANEnable_Switch")[0]

    # 对X_CT_COM_LanInterface重新解析,兼容GUI或RF传参数LAN1,lan1格式
    ret, X_CT_COM_LanInterface = ParseLANName(X_CT_COM_LanInterface)
    if ret == ERR_FAIL:
        info = u'输入的X_CT_COM_LanInterface参数错误'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        return ret

    # WANDSLLinkConfig节点参数
    if PVC_OR_VLAN == "":
        PVC_OR_VLAN_flag = 0
    else:
        PVC_OR_VLAN_flag = 1

    dict_wanlinkconfig = {
        'Enable': [1, '1'],
        'X_CT-COM_Mode': [PVC_OR_VLAN_flag, '2'],
        'X_CT-COM_VLAN': [PVC_OR_VLAN_flag, PVC_OR_VLAN]
    }

    # WANPPPConnection节点参数
    # 注意:X_CT-COM_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    LAN1 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1'
    LAN2 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2'
    LAN3 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.3'
    LAN4 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.4'
    WLAN1 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.1'
    WLAN2 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.2'
    WLAN3 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.3'
    WLAN4 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.4'
    dict_wanpppconnection = {}

    # WANIPConnection节点参数
    dict_wanipconnection = {
        'Enable': [1, '1'],
        'ConnectionType': [1, 'IP_Routed'],
        'Name': [0, 'Null'],
        'NATEnabled': [0, 'Null'],
        'AddressingType': [1, 'DHCP'],
        'ExternalIPAddress': [0, '10.10.10.10'],
        'SubnetMask': [0, '255.255.255.0'],
        'DefaultGateway': [0, '10.10.10.1'],
        'DNSEnabled': [0, 'Null'],
        'DNSServers': [0, '10.10.10.2'],
        'X_CT-COM_LanInterface': [1, X_CT_COM_LanInterface],
        'X_CT-COM_ServiceList': [1, X_CT_COM_ServiceList]
    }

    # 开始执行WAN连接开通工单
    ret, ret_data = WANSetUP(obj,
                             sn,
                             WANEnable_Switch,
                             DeviceType,
                             AccessMode,
                             PVC_OR_VLAN,
                             dict_wanlinkconfig,
                             dict_wanpppconnection,
                             dict_wanipconnection,
                             rollbacklist=rollbacklist)

    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)

    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] +
                            ret_data_rollback)

    info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
    return ret
예제 #4
0
def test_script(obj):
    """
    """
    sn = obj.sn # 取得SN号
    DeviceType = "GPON"  # 绑定tr069模板类型.只支持ADSL\LAN\EPON三种
    AccessMode = 'Static'    # WAN接入模式,可选PPPoE_Bridge,PPPoE,DHCP,Static
    rollbacklist = []  # 存储工单失败时需回退删除的实例.目前缺省是不开启回退
    # 初始化日志
    obj.dict_ret.update(str_result=u"开始执行工单:%s........\n" %
                        os.path.basename(os.path.dirname(__file__)))
    
    # data传参
    PVC_OR_VLAN = obj.dict_data.get("PVC_OR_VLAN")[0]    # ADSL上行只关心PVC值,LAN和EPON上行则关心VLAN值
    ExternalIPAddress = obj.dict_data.get("ExternalIPAddress")[0]
    SubnetMask = obj.dict_data.get("SubnetMask")[0]
    DefaultGateway = obj.dict_data.get("DefaultGateway")[0]
    DNSServers = obj.dict_data.get("DNSServers")[0]
    X_CU_COM_LanInterface = obj.dict_data.get("X_CU_COM_LanInterface")[0]
    X_CU_COM_ServiceList = obj.dict_data.get("X_CU_COM_ServiceList")[0]
    WANEnable_Switch = obj.dict_data.get("WANEnable_Switch")[0]


    # 对X_CU_COM_LanInterface重新解析,兼容LAN1,lan1格式
    ret, X_CU_COM_LanInterface = ParseLANName(X_CU_COM_LanInterface)
    if ret == ERR_FAIL:
        info = u'输入的X_CU_COM_LanInterface参数错误'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)    
        return ret
    
    
    # X_CU_WANEponLinkConfig节点参数
    if PVC_OR_VLAN == "":
        PVC_OR_VLAN_flag = 0
    else:
        PVC_OR_VLAN_flag = 1
        
    dict_wanlinkconfig = {'X_CU_VLANEnabled':[1, '1'],
                          'X_CU_802_1p':['0','NULL'],
                          'X_CU_VLAN':[PVC_OR_VLAN_flag, PVC_OR_VLAN]}
    
    # WANPPPConnection节点参数
    # 注意:X_CU_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    dict_wanpppconnection = {}
    
    # WANIPConnection节点参数
    # 注意,贝曼没有下发DNS使能,即隐含的意思是CPE新建实例后DNSEnabled缺省开启
    dict_wanipconnection = {'Enable':[1, '1'],
                            'ConnectionType':[1, 'IP_Routed'], 
                            'Name':[0, 'Null'],
                            'NATEnabled':[0, 'Null'], 
                            'AddressingType':[1, 'Static'],
                            'ExternalIPAddress':[1, ExternalIPAddress], 
                            'SubnetMask':[1, SubnetMask],
                            'DefaultGateway':[1, DefaultGateway], 
                            'DNSEnabled':[0, 'Null'],
                            'DNSServers':[1, DNSServers], 
                            'X_CU_LanInterface':[1, X_CU_COM_LanInterface], 
                            'X_CU_ServiceList':[1, X_CU_COM_ServiceList]}
    
    # 开始执行WAN连接开通工单
    ret, ret_data = WANSetUP(obj, sn, WANEnable_Switch, DeviceType,
                       AccessMode, PVC_OR_VLAN, dict_wanlinkconfig,
                       dict_wanpppconnection, dict_wanipconnection,
                       rollbacklist=rollbacklist)
    
    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)
    
    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data_rollback)
    
    info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)    
    return ret
예제 #5
0
파일: script.py 프로젝트: zhaojunhhu/TR069
def test_script(obj):
    """
    """
    sn = obj.sn  # 取得SN号
    DeviceType = "VDSL"  # 绑定tr069模板类型.只支持ADSL\LAN\EPON三种
    AccessMode = 'PPPoE'  # WAN接入模式,可选PPPoE_Bridge,PPPoE,DHCP,Static
    X_CT_COM_ServiceList = "TR069,INTERNET"  # WAN连接的服务模式,和以前的RF统一,写死 zsj 2014-6-26
    AccessMode_IPTV = "PPPoE_Bridged"
    rollbacklist = []  # 存储工单失败时需回退删除的实例.目前缺省是不开启回退
    # 初始化日志
    obj.dict_ret.update(str_result=u"开始执行工单:%s........\n" %
                        os.path.basename(os.path.dirname(__file__)))

    # data传参
    PVC_OR_VLAN = obj.dict_data.get("PVC_OR_VLAN")[
        0]  # ADSL上行只关心PVC值,LAN和EPON上行则关心VLAN值
    Username = obj.dict_data.get("Username")[0]
    Password = obj.dict_data.get("Password")[0]
    X_CT_COM_LanInterface = obj.dict_data.get("X_CT_COM_LanInterface")[0]
    #X_CT_COM_ServiceList = obj.dict_data.get("X_CT_COM_ServiceList")[0]
    WANEnable_Switch = obj.dict_data.get("WANEnable_Switch")[0]

    #
    X_CT_COM_MulticastVlan = obj.dict_data.get("X_CT_COM_MulticastVlan")[
        0]  # 新增公共组播VLAN的下发

    # 对X_CT_COM_LanInterface重新解析,兼容GUI或RF传参数LAN1,lan1格式
    ret, X_CT_COM_LanInterface = ParseLANName(X_CT_COM_LanInterface)
    if ret == ERR_FAIL:
        info = u'输入的X_CT_COM_LanInterface参数错误'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        return ret

    # WANDSLLinkConfig节点参数
    if PVC_OR_VLAN == "":
        PVC_OR_VLAN_flag = 0
    else:
        PVC_OR_VLAN_flag = 1

    dict_wanlinkconfig = {
        'Enable': [1, '1'],
        'Mode': [PVC_OR_VLAN_flag, '2'],
        'VLANIDMark': [PVC_OR_VLAN_flag, PVC_OR_VLAN]
    }

    # WANPPPConnection节点参数
    # 注意:X_CT-COM_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    LAN1 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.1'
    LAN2 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2'
    LAN3 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.3'
    LAN4 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.4'
    WLAN1 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.1'
    WLAN2 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.2'
    WLAN3 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.3'
    WLAN4 = 'InternetGatewayDevice.LANDevice.1.WLANConfiguration.4'

    dict_wanpppconnection = {
        'Enable': [1, '1'],
        'ConnectionType': [1, 'IP_Routed'],
        'Name': [0, 'Null'],
        'Username': [1, Username],
        'Password': [1, Password],
        'X_CT-COM_LanInterface': [1, X_CT_COM_LanInterface],
        'X_CT-COM_ServiceList': [1, X_CT_COM_ServiceList],
        'X_CT-COM_LanInterface-DHCPEnable': [0, 'Null']
    }

    # WANIPConnection节点参数
    dict_wanipconnection = {}

    # IPTV节点参数
    dict_root = {
        'IGMPEnable': [1, '1'],
        'ProxyEnable': [0, 'Null'],
        'SnoopingEnable': [0, 'Null']
    }
    # WANPPPConnection节点参数
    # 注意:X_CT-COM_IPMode节点有些V4版本没有做,所以不能使能为1.实际贝曼工单也是没有下发的
    LAN2 = 'InternetGatewayDevice.LANDevice.1.LANEthernetInterfaceConfig.2'  # 绑字到LAN2

    if X_CT_COM_MulticastVlan == "":
        X_CT_COM_MulticastVlan_flag = 0
    else:
        X_CT_COM_MulticastVlan_flag = 1

    dict_wanpppconnection_iptv = {
        'Enable': [1, '1'],
        'ConnectionType': [1, 'PPPoE_Bridged'],
        'Name': [0, 'Null'],
        'Username': [0, 'Null'],
        'Password': [0, 'Null'],
        'X_CT-COM_LanInterface': [1, LAN2],
        'X_CT-COM_ServiceList': [1, 'OTHER'],
        'X_CT-COM_LanInterface-DHCPEnable': [0, 'Null'],
        'X_CT-COM_MulticastVlan':
        [X_CT_COM_MulticastVlan_flag, X_CT_COM_MulticastVlan]
    }

    # WANIPConnection节点参数
    dict_wanipconnection_iptv = {}

    # 开始执行WAN连接开通工单
    ret, ret_data = WANSetUP(obj,
                             sn,
                             WANEnable_Switch,
                             DeviceType,
                             AccessMode,
                             PVC_OR_VLAN,
                             dict_wanlinkconfig,
                             dict_wanpppconnection,
                             dict_wanipconnection,
                             change_account=0,
                             rollbacklist=rollbacklist)

    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)

    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        info = u'开通上网失败\n'
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] +
                            ret_data_rollback)
        info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
        return ret

    # 增加IPTV 连接
    ret, ret_data = AddAnIPTV(obj,
                              sn,
                              WANEnable_Switch,
                              DeviceType,
                              AccessMode_IPTV,
                              PVC_OR_VLAN,
                              dict_root,
                              dict_wanpppconnection_iptv,
                              dict_wanipconnection_iptv,
                              rollbacklist=rollbacklist)

    # 将工单脚本执行结果返回到OBJ的结果中
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + ret_data)

    # 如果执行失败,统一调用回退机制(缺省是关闭的)
    if ret == ERR_FAIL:
        ret_rollback, ret_data_rollback = rollback(sn, rollbacklist, obj)
        obj.dict_ret.update(str_result=obj.dict_ret["str_result"] +
                            ret_data_rollback)

    info = u"工单:%s执行结束\n" % os.path.basename(os.path.dirname(__file__))
    obj.dict_ret.update(str_result=obj.dict_ret["str_result"] + info)
    return ret