DAC is based of 3 stages in BPIR4


Introduction

DAC on Broadband is an enabling technology the purpose of which is to support the flexibility required by the next generation of "smart" routers. DAC on Broadband allows operators to remotely manage the life cycle of containerized applications and services. This negates the need for monolithic system image updates and allows for varied set of deployed services across the customer base where one size does not fit all.
Detailed info is mentioned in wiki page:  DAC on Broadband

Dac functionality in BPIR4.

For dac validation we need dobby, crun and dsm functionalities in the BPIR4 device. So all mentioned functionality has been brought to BPIR4 platform by including "dac" distro feature into the build, for reference follow mentioned jira.

OCI image generation.

OCI image generation is specifically for broadband application developers, in which they can create their application irrespective of platform. That image will be compatible with all the platforms but only difference is developer need to define the arch of the platform like 32 bit or 64 bit.
Generic meta layer for the generation of OCI image will meta-dac-sdk-broadband.(https://github.com/rdkcentral/meta-dac-sdk-broadband)
Build instructions are mentioned below for oci image generation, as of now we are offering "iperf3 application" in meta-dac-sdk-broadband. For any query you can refer mentioned jira.

#Following repo commands will required meta-layers see manifest of https://code.rdkcentral.com/r/plugins/gitiles/manifests/+/refs/heads/rdk-next/rdkb-extsrc.xml
1)repo init -u https://code.rdkcentral.com/r/rdkcmf/manifests -m rdkb-extsrc.xml -b kirkstone   


#execute the below command to clone the meta-dac-sdk-broadband and bitbake 
2)sed -i '/oe-layers.xml/a  \ \ \ \ <project name="rdkcentral/meta-dac-sdk-broadband" remote="github" path="meta-dac-sdk-broadband" revision="main" /> \n\ \ \ \ <project name="yoctoproject/poky" remote="github" path="." revision="1e0d58c53b7d9c3feb631e46666ae7a3e3614253" upstream="kirkstone"/>' .repo/manifests/rdkb-extsrc.xml 

#Below command to sync all the code to the folder.  
3)repo sync -j `nproc` --no-clone-bundle --no-tags   


# cherrypick the below link to overcome the old syntax override issue with bitbake 
4)cd bitbake && git fetch https://code.rdkcentral.com/r/rdk/components/opensource/oe/bitbake refs/changes/35/85335/3 && git cherry-pick FETCH_HEAD && cd ..   

5). ./oe-init-build-env  #Command used for setting up build folder. 
6)cp ../meta-dac-sdk-broadband/manifests/bblayers.conf conf/ 
7)echo 'MACHINE = "raspberrypi4-64"' >> conf/local.conf # This step is used to differentiate the arch where BPIR4 supports 64 bit arch by default.        

# Building Iperf DAC app 
8)bitbake dac-image-iperf3

Instructions for on-boarding new applications to meta-dac-sdk-broadband .

As of now we are offering iperf application in meta-dac-sdk-broadband, So taking Iperf as reference for this steps.

1)At initial create a recipe wrt application, where we will be including all the info for compilation.

 eg: Iperf application recipe file path and info.
         meta-dac-sdk-broadband/recipes-example/example/iperf3/iperf3_3.11.bb .

2)Create and include application dependent parameters info in <application Name>-appmetadata.json file.

eg: meta data file for iperf application.
       meta-dac-sdk-broadband/recipes-example/images/metadatas/iperf3-appmetadata.json .

3)Create application specific image bb file which is responsible for combining all the depended component to generate final OCI image for application.

eg: Image bb file for iperf application
       meta-dac-sdk-broadband/recipes-example/images/dac-image-iperf3.bb .

4)Create bbclass file for the application to inherit all the changes to application wrt to oci image supported packages.

eg: bbclass file for iperf application.
      meta-dac-sdk-broadband/classes/dac-image-iperf3.bbclass

5)After completing all the above mentioned steps you can follow osi image build instructions which are mentioned above with specified application name to bitbake command.

eg: bitbake command for iperf oci image generation.
       bitbake dac-image-iperf3.

Bundle Creation for BPIR4.

After OCI image gets generated we need to generate bundlegen for the generated oci image to make that application platform compatible. (https://github.com/rdkcentral/BundleGen.git)
For BPIR4 we are having below mentioned templates.
            1)bpir4_reference.json
            2)bpir4_reference_libs.json
Before generating bundlegen make sure that you are having supported packages in your local machine(linux machine) for bundlegen support.

git clone https://github.com/rdkcentral/BundleGen.git  (clone Bundlegen code.) 
cd BundleGen 
python3 setup.py build 
python3 setup.py install 
export PYTHONPATH=/usr/lib/python3.8/site:$PYTHONPATH
# Copy generated oci image to this folder.
chmod 777 dac-image-iperf3-raspberrypi4-20240930100642.rootfs-oci.tar
tar -xvf dac-image-iperf3-raspberrypi4-20240930100642.rootfs-oci.tar 
chmod 777 dac-image-iperf3-raspberrypi4-20240930100642.rootfs 
bundlegen generate --platform bpir4_reference oci:dac-image-iperf3-raspberrypi4-20240930100642.rootfs-oci.tar ~/iperf332 (creates the iperf332.tar.gz bundle file)

   Bundlegen Jira for reference.
         

DAC application validation.

     In BPIR4 dac application can be installed and validated in 2 ways:
        1)Using USP-Pa.
        2) Manual validation ( By copying oci bundle to bpir4 device).
      Both validation steps are included in mentioned jira.