What is RFC?

RFC stands for RDK Feature Control.
It provides a mechanism to remotely enable, disable, or configure software features on RDK-based devices (CPEs).

RFC is primarily used by Release Management for controlled, staged rollouts of new features across production devices — ensuring stability and gradual deployment.

Source code

rdkcentral/rfc at main


How does RDK receive the RFC configuration?

The RFC configuration process involves multiple RDK components working together to fetch, process, and apply configuration updates.

The flow is summarized below:


1. Maintenance Manager


2. RFC Manager → XConf


3. Configuring the xconf server url



4. RFC Manager Processing


5. tr181 Set and RFC API


6. tr69hostif Request Routing


7. mTLS support


Architecture Diagram:


251030-11:49:58.524719 [mod=RFCMGR, lvl=INFO] [tid=1964] [DownloadRuntimeFeatutres][1889] Xconf Request : [https://xconf.rdkcentral.com/featureControl/getSettings?estbMacAddress=D8%3A3A%3ADD%3A0D%3A16%3AB7&firmwareVersion=lib32-application-test-image-RPI4-20251030114955&env=dev&model=RPI4&manufacturer=RaspberryPi&controllerId=2504&channelMapId=2345&VodId=15660&partnerId=community&osClass=&accountId=&Experience=X1&version=2]

{
  "featureControl": {
    "features": [
      {
        "name": "TC-NTP",
        "enable": true,
        "effectiveImmediate": true,
        "configData": {
          "tr181.Device.Time.NTPServer1": "time.google.com",
          "tr181.Device.Time.NTPServer2": "time1.google.com",
          "tr181.Device.Time.NTPServer3": "time2.google.com",
          "tr181.Device.Time.NTPServer4": "time3.google.com",

          "tr181.Device.Time.NTPServer5": "time4.google.com"
        },
        "featureInstance": "TC-NTP"
      }
    ]
  }
}

 

root@raspberrypi4-64-rdke:~# cat /opt/secure/RFC/tr181.list
TR181: Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.TR069support.Enable false
TR181: Device.Time.NTPServer1 time.google.com
TR181: Device.Time.NTPServer2 time1.google.com
TR181: Device.Time.NTPServer3 time2.google.com
TR181: Device.Time.NTPServer4 time3.google.com
TR181: Device.Time.NTPServer5 time4.google.com
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~# cat /opt/secure/RFC/rfcFeature.list
TC-NTP=true,
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~# cat /opt/secure/RFC/rfcVariable.ini
export RFC_ENABLE_TC-NTP=true
export RFC_TC-NTP_effectiveImmediate=true
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~# cat /opt/secure/RFC/tr181store.ini
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.XconfUrl=https://xconf.rdkcentral.com/featureControl/getSettings
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.ConfigSetHash=18HWRXtCXc9e7oSb8M3AQ6sdA587hfs1V5
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.XconfSelector=prod
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.TR069support.Enable=false
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.AccountInfo.AccountID=1234
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.ConfigSetTime=1764012977
Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.ConfigChangeTime=1764012977
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~# cat /opt/secure/RFC/bootstrap.ini | grep NTP
Device.Time.NTPServer2=time1.google.com
Device.Time.NTPServer1=time.google.com
Device.Time.NTPServer5=time4.google.com
Device.Time.NTPServer4=time3.google.com
Device.Time.NTPServer3=time2.google.com
root@raspberrypi4-64-rdke:~#
root@raspberrypi4-64-rdke:~#


tr181 -s -v invalidate Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Control.ConfigSetHash

Child pages