# Add data filter

This sample application demonstrates how to add a data filter.

1. Get the DataFactory, DataConnectionManager and DataFilterManager instances

auto &dataFactory = telux::data::DataFactory::getInstance();
    auto dataConnMgr_ = dataFactory.getDataConnectionManager();
    auto dataFilterMgr_ = dataFactory.getDataFilterManager();
    Copy to clipboard

2. Wait for the Data Connection Manager and Data Filter Manager sub system initialization

bool dataConnectionSubSystemStatus = dataConnMgr_->isSubsystemReady();
    if (!dataConnectionSubSystemStatus) {
        std::cout << "Data Connection Manager subsystem is not ready, Please wait" << std::endl;
        std::future<bool> f = dataConnMgr_->onSubsystemReady();
        // Wait unconditionally for data manager subsystem to be ready
        dataConnectionSubSystemStatus = f.get();
    }
    
    // Exit the application, if SDK is unable to initialize data manager subsystems
    if (!dataConnectionSubSystemStatus) {
        std::cout << "ERROR - Unable to initialize subSystem" << std::endl;
        return EXIT_FAILURE;
    }
    
    bool dataFilterSubSystemStatus = dataFilterMgr_->isReady();
    if (!dataFilterSubSystemStatus) {
        std::cout << "Data Filter Manager subsystem is not ready, Please wait" << std::endl;
        std::future<bool> f = dataFilterMgr_->onReady();
        // Wait unconditionally for data filter subsystem to be ready
        dataFilterSubSystemStatus = f.get();
    }
    
    // Exit the application, if SDK is unable to initialize data manager subsystems
    if (!dataFilterSubSystemStatus) {
        std::cout << "ERROR - Unable to initialize subSystem" << std::endl;
        return EXIT_FAILURE;
    }
    Copy to clipboard

3. Set data filter mode to enable

std::promise<bool> p;
    int profileId = 2;
    telux::data::IpFamilyType ipFamilyType = telux::data::IpFamilyType::IPV4;
    
    telux::data::DataRestrictMode enableMode;
    enableMode.filterAutoExit = telux::data::DataRestrictModeType::DISABLE;
    enableMode.filterMode = telux::data::DataRestrictModeType::ENABLE;
    
    auto status = dataFilterMgr_->setDataRestrictMode(enableMode,
              [&p](telux::common::ErrorCode error) {
             if (error == telux::common::ErrorCode::SUCCESS) {
                 p.set_value(true);
             } else {
                 std::cout << "Failed to set data filter mode" << std::endl;
                 p.set_value(false);
             }
         }, profileId, ipFamilyType);
    if(status == telux::common::Status::SUCCESS) {
       std::cout << "Set data filter mode Request sent" << std::endl;
    } else {
       std::cout << "Set data filter mode Request failed" << std::endl;
    }
    
    if (p.get_future().get()) {
        std::cout << "Set data filter mode succeeded." << std::endl;
    }
    Copy to clipboard

4. Add data filter

std::promise<bool> p;
    std::string ipAddr = std::string("168.128.91.1");
    int port = 8888;
    telux::data::IPv4Info ipv4Info_ = {};
    ipv4Info_.srcAddr = ipAddr;
    
    telux::data::PortInfo srcPort;
    srcPort.port = port;
    srcPort.range = 0;
    telux::data::UdpInfo udpInfo_ = {};
    udpInfo_.src = srcPort;
    
    // IpProtocol for UDP
    int PROTO_UDP =  17;
    // create a filter of UDP type, and set source IP and port.
    std::shared_ptr<telux::data::IIpFilter> dataFilter =
    dataFactory.getNewIpFilter(PROTO_UDP);
    dataFilter->setIPv4Info(ipv4Info_);
    
    auto udpRestrictFilter = std::dynamic_pointer_cast<telux::data::IUdpFilter>(dataFilter);
    udpRestrictFilter->setUdpInfo(udpInfo_);
    
    auto status = dataFilterMgr_->addDataRestrictFilter(dataFilter,
              [&p](telux::common::ErrorCode error) {
             if (error == telux::common::ErrorCode::SUCCESS) {
                 p.set_value(true);
             } else {
                 std::cout << "Failed to add data filter" << std::endl;
                 p.set_value(false);
             }
         }, profileId, ipFamilyType);
    if(status == telux::common::Status::SUCCESS) {
         std::cout << "Add data filter Request sent" << std::endl;
    } else {
         std::cout << "Add data filter Request failed" << std::endl;
    }
    
    if (p.get_future().get()) {
              std::cout << "Add data filter succeeded." << std::endl;
    }
    Copy to clipboard

Last Published: May 20, 2026

[Previous Topic
Get/Set data filter mode](https://docs.qualcomm.com/bundle/publicresource/80-PF458-7/topics/get_and_set_data_filter_mode.md) [Next Topic
Remove data filter mode](https://docs.qualcomm.com/bundle/publicresource/80-PF458-7/topics/remove_data_filters.md)