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. Runtime Sources and Priority

SourceBacking StoreOwnerPurpose
Persisted TR181 RFC override/opt/secure/RFC/tr181store.iniRFC/XConf apply pathXConf-applied parameter persistence
Persisted bootstrap value/opt/secure/RFC/bootstrap.iniXBSStoreRFC or WebPA overrides
Device-specific bootstrap overlay/etc/partners_defaults_device.jsontr69hostif firmware defaultsDevice-specific defaults
Partner bootstrap defaults/etc/partners_defaults.json (partner section) - communitytr69hostif firmware defaultsPartner-specific firmware defaults
Generic steady-state bootstrap defaults/etc/partners_defaults.json (default section)tr69hostif firmware defaultsGeneric firmware defaults
Early-boot bootstrap defaults/etc/partners_defaults.json (default_boot section)tr69hostif firmware defaultsEarly-boot temporary profile
XML default valueMerged TR181 data modelwaldb / tr69hostif validation pathData model XML defaults
RFC fallback defaults/etc/rfcdefaults/*.ini and /tmp/rfcdefaults.iniRFC repo fallback pathRFC library fallback layer
PrioritySourceFile LocationUsed ByCondition
1Persisted XConf-applied value/opt/secure/RFC/tr181store.inilibtr181api::getParam()If key missing in live hostif
2Persisted bootstrap value/opt/secure/RFC/bootstrap.iniRFC libraryIf key missing in tr181store.ini
3RFC fallback default/tmp/rfcdefaults.ini (merged from /etc/rfcdefaults/*.ini)RFC libraryFinal fallback for TR181-style keys
N/ALegacy RFC variables/opt/secure/RFC/rfcVariable.iniRFC libraryFor legacy RFC_xxxx keys (non-dotted)

PrioritySourceSelection LogicFile Location
1Persisted RFC/WebPA overrideDirect lookup/opt/secure/RFC/bootstrap.ini
2aPartner section bootstrap defaultIf PartnerId known AND match found/etc/partners_defaults.json (partner section)
2bGeneric defaultIf PartnerId known BUT no match/etc/partners_defaults.json (default section)
2cEarly-boot defaultIf PartnerId NOT yet available/etc/partners_defaults.json (default_boot section)
3Device-specific overlayApplied over 2a/2b/2c/etc/partners_defaults_device.json
PrioritySourceScopeNotes
1Live hostif valueActive hostif GET pathHighest precedence if returned
2Persisted runtime overrideRFC/WebPA apply pathsXConf-applied values
3Persisted bootstrap valueBootstrap-backed keysRFC or WebPA overrides
4Effective bootstrap firmware defaultAll bootstrap-backed lookupsFrom partners_defaults_device.json overlay + selected section
5XML default valueLive hostif fallback pathsOnly when handler fails; uses dmParam.defaultValue
6/etc/rfcdefaults merged fallbackRFC-library fallback pathsFinal fallback; lowest precedence

8. 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