mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-11-04 04:18:07 +00:00 
			
		
		
		
	Compare commits
	
		
			95 Commits
		
	
	
		
			v2.5.0
			...
			v2.6.0-rc2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a70dda4a8e | ||
| 
						 | 
					a01f1add81 | ||
| 
						 | 
					57849591d7 | ||
| 
						 | 
					b4a09e7167 | ||
| 
						 | 
					96bb8b1372 | ||
| 
						 | 
					99ea9da785 | ||
| 
						 | 
					bfe7fadfc5 | ||
| 
						 | 
					ad1dcc4f45 | ||
| 
						 | 
					f371c789d0 | ||
| 
						 | 
					386eca1f65 | ||
| 
						 | 
					8b9047952d | ||
| 
						 | 
					5a105ef06e | ||
| 
						 | 
					c60dc1e045 | ||
| 
						 | 
					1e1bd19429 | ||
| 
						 | 
					cfe07f6e15 | ||
| 
						 | 
					a64039db20 | ||
| 
						 | 
					7f81ddb8cc | ||
| 
						 | 
					3c0d495334 | ||
| 
						 | 
					38a7c54cce | ||
| 
						 | 
					1aead07444 | ||
| 
						 | 
					d2f44cbb12 | ||
| 
						 | 
					43d7ca31d6 | ||
| 
						 | 
					0985c573b0 | ||
| 
						 | 
					d9ed861c1d | ||
| 
						 | 
					8ef9989147 | ||
| 
						 | 
					7d5eab4bf3 | ||
| 
						 | 
					5e03e04bbd | ||
| 
						 | 
					6fabaeca53 | ||
| 
						 | 
					be4ca445f5 | ||
| 
						 | 
					e99c8b27e1 | ||
| 
						 | 
					e9055b4f08 | ||
| 
						 | 
					cfcafb676b | ||
| 
						 | 
					899b4d6bfd | ||
| 
						 | 
					2003632ddb | ||
| 
						 | 
					d4a14106b7 | ||
| 
						 | 
					85af9d7e0b | ||
| 
						 | 
					d4442efbfe | ||
| 
						 | 
					3a26ae2695 | ||
| 
						 | 
					09af596e85 | ||
| 
						 | 
					5985187316 | ||
| 
						 | 
					33ac83a309 | ||
| 
						 | 
					921c1b553d | ||
| 
						 | 
					d160507230 | ||
| 
						 | 
					7368620fd2 | ||
| 
						 | 
					a910e297a3 | ||
| 
						 | 
					f819bb8753 | ||
| 
						 | 
					cc0d4bded2 | ||
| 
						 | 
					e3b2b7f232 | ||
| 
						 | 
					c8dde50eba | ||
| 
						 | 
					3c355f96eb | ||
| 
						 | 
					93dd24ef6e | ||
| 
						 | 
					107bc8ef65 | ||
| 
						 | 
					9a8278afcc | ||
| 
						 | 
					1c48765913 | ||
| 
						 | 
					c6a45184fd | ||
| 
						 | 
					18d5b8cba7 | ||
| 
						 | 
					65c08ade18 | ||
| 
						 | 
					3f6fee91e9 | ||
| 
						 | 
					d29c4e49b3 | ||
| 
						 | 
					f162000749 | ||
| 
						 | 
					c804333bc0 | ||
| 
						 | 
					449795db97 | ||
| 
						 | 
					af92a2c7aa | ||
| 
						 | 
					b68affdf6a | ||
| 
						 | 
					7a95f9ac2d | ||
| 
						 | 
					8b5d9d84de | ||
| 
						 | 
					93d93c7708 | ||
| 
						 | 
					b35232ab4a | ||
| 
						 | 
					770a2bdd36 | ||
| 
						 | 
					9650f8eaa8 | ||
| 
						 | 
					63ab76bb30 | ||
| 
						 | 
					fcb21ca0b6 | ||
| 
						 | 
					d6d5422152 | ||
| 
						 | 
					5b970a3f12 | ||
| 
						 | 
					a4a7c1f9f3 | ||
| 
						 | 
					5cbac23e3f | ||
| 
						 | 
					172c0d3690 | ||
| 
						 | 
					535f41d58b | ||
| 
						 | 
					2be18091a4 | ||
| 
						 | 
					73f42e3c6f | ||
| 
						 | 
					cff778d8ca | ||
| 
						 | 
					94d4498a2d | ||
| 
						 | 
					eb0ab17f58 | ||
| 
						 | 
					1ab99d50b2 | ||
| 
						 | 
					dfeddc0d89 | ||
| 
						 | 
					efde86be9d | ||
| 
						 | 
					739e8c12fb | ||
| 
						 | 
					3fdbbff9f7 | ||
| 
						 | 
					0a56755bef | ||
| 
						 | 
					c35290772d | ||
| 
						 | 
					cedcbcbc2b | ||
| 
						 | 
					9de96deca8 | ||
| 
						 | 
					19dbb1d5e3 | ||
| 
						 | 
					83b6ccf562 | ||
| 
						 | 
					ea86593835 | 
							
								
								
									
										39
									
								
								.github/actions/create-ami-from-image/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.github/actions/create-ami-from-image/action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					name: Create AMI from firmware image in S3 bucket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inputs:
 | 
				
			||||||
 | 
					  firmware_image_name:
 | 
				
			||||||
 | 
					    description: Name of the firmware image
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					  firmware_image_s3_bucket:
 | 
				
			||||||
 | 
					    description: Name of the S3 bucket where the image resides
 | 
				
			||||||
 | 
					    required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					runs:
 | 
				
			||||||
 | 
					  using: "composite"
 | 
				
			||||||
 | 
					  steps:
 | 
				
			||||||
 | 
					    - name: Import snapshot based on firmware image
 | 
				
			||||||
 | 
					      id: import_snapshot
 | 
				
			||||||
 | 
					      shell: bash
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        echo ::set-output name=import_task_id::$(aws ec2 import-snapshot --description '${{ inputs.firmware_image_name }}' --disk-container 'Format=raw,UserBucket={S3Bucket=${{ inputs.firmware_image_s3_bucket }},S3Key=${{ inputs.firmware_image_name }}}' | jq -r '.ImportTaskId')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Wait for import task to complete and get snapshot ID
 | 
				
			||||||
 | 
					      id: get_snapshot_id
 | 
				
			||||||
 | 
					      shell: bash
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        IMPORT_TASK_STATUS=""
 | 
				
			||||||
 | 
					        while [[ $IMPORT_TASK_STATUS != 'completed' ]]; do
 | 
				
			||||||
 | 
					          IMPORT_TASK_STATUS=$(aws ec2 describe-import-snapshot-tasks --import-task-ids ${{ steps.import_snapshot.outputs.import_task_id }} | jq -r '.ImportSnapshotTasks[].SnapshotTaskDetail.Status')
 | 
				
			||||||
 | 
					          echo "Import task status is $IMPORT_TASK_STATUS, waiting for completion."
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					        echo ::set-output name=id::$(aws ec2 describe-import-snapshot-tasks --import-task-ids ${{ steps.import_snapshot.outputs.import_task_id }} | jq -r '.ImportSnapshotTasks[].SnapshotTaskDetail.SnapshotId')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Tag snapshot with image name
 | 
				
			||||||
 | 
					      shell: bash
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        aws ec2 create-tags --resources ${{ steps.get_snapshot_id.outputs.id }} --tags 'Key=Name,Value=${{ inputs.firmware_image_name }}'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Register AMI based on snapshot
 | 
				
			||||||
 | 
					      shell: bash
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        aws ec2 register-image --name '${{ inputs.firmware_image_name }}' --root-device-name /dev/xvda --block-device-mappings 'DeviceName=/dev/xvda,Ebs={SnapshotId=${{ steps.get_snapshot_id.outputs.id }}}'
 | 
				
			||||||
							
								
								
									
										36
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,13 @@
 | 
				
			|||||||
name: Build OpenWrt/uCentral images
 | 
					name: Build OpenWrt/uCentral images
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  AWS_DEFAULT_OUTPUT: json
 | 
				
			||||||
 | 
					  AWS_DEFAULT_REGION: us-east-1
 | 
				
			||||||
 | 
					  AWS_S3_BUCKET_NAME: ucentral-ap-firmware
 | 
				
			||||||
 | 
					  AWS_ACCOUNT_ID: ${{ secrets.UCENTRAL_S3_ACCOUNT_ID }}
 | 
				
			||||||
 | 
					  AWS_ACCESS_KEY_ID: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_ID }}
 | 
				
			||||||
 | 
					  AWS_SECRET_ACCESS_KEY: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_SECRET }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  push:
 | 
					  push:
 | 
				
			||||||
    branches: [ main, next, staging-* ]
 | 
					    branches: [ main, next, staging-* ]
 | 
				
			||||||
@@ -8,10 +16,12 @@ on:
 | 
				
			|||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  build:
 | 
					  build:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    outputs:
 | 
				
			||||||
 | 
					      x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }}
 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      fail-fast: false
 | 
					      fail-fast: false
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf160d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4' ]
 | 
					        target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf196', 'cig_wf610d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'indio_um-305ac', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'udaya_a5-id2', 'wallys_dr40x9', 'x64_vm' ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - uses: actions/checkout@v2
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
@@ -24,17 +34,12 @@ jobs:
 | 
				
			|||||||
        make -j TARGET=${{ matrix.target }}
 | 
					        make -j TARGET=${{ matrix.target }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Package and upload image for ${{ matrix.target }}
 | 
					    - name: Package and upload image for ${{ matrix.target }}
 | 
				
			||||||
 | 
					      id: package_and_upload_image
 | 
				
			||||||
      env:
 | 
					      env:
 | 
				
			||||||
          GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
 | 
					          GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
 | 
				
			||||||
          GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
 | 
					          GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
 | 
				
			||||||
          ARTIFACTORY_USERNAME: cicd-indoor-main
 | 
					          ARTIFACTORY_USERNAME: cicd-indoor-main
 | 
				
			||||||
          ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
 | 
					          ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
 | 
				
			||||||
          AWS_S3_BUCKET_NAME: ucentral-ap-firmware
 | 
					 | 
				
			||||||
          AWS_DEFAULT_OUTPUT: json
 | 
					 | 
				
			||||||
          AWS_DEFAULT_REGION: us-east-1
 | 
					 | 
				
			||||||
          AWS_ACCOUNT_ID: ${{ secrets.UCENTRAL_S3_ACCOUNT_ID }}
 | 
					 | 
				
			||||||
          AWS_ACCESS_KEY_ID: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_ID }}
 | 
					 | 
				
			||||||
          AWS_SECRET_ACCESS_KEY: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_SECRET }}
 | 
					 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
 | 
					        LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
 | 
				
			||||||
        HASH=$(git rev-parse --short HEAD)
 | 
					        HASH=$(git rev-parse --short HEAD)
 | 
				
			||||||
@@ -66,6 +71,10 @@ jobs:
 | 
				
			|||||||
        [ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
 | 
					        [ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
 | 
				
			||||||
        [ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$JSON_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
 | 
					        [ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$JSON_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [ ${{ matrix.target }} == 'x64_vm' ]; then
 | 
				
			||||||
 | 
					          echo ::set-output name=x64_vm_image_name::"$(echo $IMG_NAME)"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  trigger-testing:
 | 
					  trigger-testing:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    needs: build
 | 
					    needs: build
 | 
				
			||||||
@@ -78,3 +87,16 @@ jobs:
 | 
				
			|||||||
        repository: Telecominfraproject/wlan-testing
 | 
					        repository: Telecominfraproject/wlan-testing
 | 
				
			||||||
        event-type: new-ap-release
 | 
					        event-type: new-ap-release
 | 
				
			||||||
        client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}'
 | 
					        client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  create-x64_vm-ami:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    needs: build
 | 
				
			||||||
 | 
					    if: startsWith(github.ref, 'refs/tags/v')
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Use create-ami-from-image composite action
 | 
				
			||||||
 | 
					      uses: ./.github/actions/create-ami-from-image
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        firmware_image_name: ${{ needs.build.outputs.x64_vm_image_name }}
 | 
				
			||||||
 | 
					        firmware_image_s3_bucket: ${{ env.AWS_S3_BUCKET_NAME }}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										80
									
								
								.github/workflows/x64_vm-build-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								.github/workflows/x64_vm-build-test.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,10 +1,88 @@
 | 
				
			|||||||
name: Test x64_vm build and AMI creation
 | 
					name: Test x64_vm build and AMI creation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  AWS_DEFAULT_OUTPUT: json
 | 
				
			||||||
 | 
					  AWS_DEFAULT_REGION: us-east-1
 | 
				
			||||||
 | 
					  AWS_S3_BUCKET_NAME: ucentral-ap-firmware
 | 
				
			||||||
 | 
					  AWS_ACCOUNT_ID: ${{ secrets.UCENTRAL_S3_ACCOUNT_ID }}
 | 
				
			||||||
 | 
					  AWS_ACCESS_KEY_ID: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_ID }}
 | 
				
			||||||
 | 
					  AWS_SECRET_ACCESS_KEY: ${{ secrets.UCENTRAL_S3_ACCESS_KEY_SECRET }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  workflow_dispatch:
 | 
					  workflow_dispatch:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  build:
 | 
					  build:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    outputs:
 | 
				
			||||||
 | 
					      x64_vm_image_name: ${{ steps.package_and_upload_image.outputs.x64_vm_image_name }}
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      fail-fast: false
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        target: ['x64_vm']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - run: echo 'Test x64_vm build and AMI creation'
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Build image for ${{ matrix.target }}
 | 
				
			||||||
 | 
					      id: build
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        git config --global user.email "you@example.com"
 | 
				
			||||||
 | 
					        git config --global user.name "Your Name"
 | 
				
			||||||
 | 
					        make -j TARGET=${{ matrix.target }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Package and upload image for ${{ matrix.target }}
 | 
				
			||||||
 | 
					      id: package_and_upload_image
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
 | 
				
			||||||
 | 
					        GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
 | 
				
			||||||
 | 
					        ARTIFACTORY_USERNAME: cicd-indoor-main
 | 
				
			||||||
 | 
					        ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
 | 
				
			||||||
 | 
					        HASH=$(git rev-parse --short HEAD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [[ ${GITHUB_REF} == "refs/heads/"* ]]
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
					          REF=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')
 | 
				
			||||||
 | 
					          IS_RELEASE="false"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          REF=$(echo ${GITHUB_REF#refs/tags/} | tr '/' '-')
 | 
				
			||||||
 | 
					          IS_RELEASE="true"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BASENAME="$(date +%Y%m%d)-$LOWERCASE_TARGET-$REF-$HASH"
 | 
				
			||||||
 | 
					        TAR_NAME="$BASENAME.tar.gz"
 | 
				
			||||||
 | 
					        IMG_NAME="$BASENAME-upgrade.bin";
 | 
				
			||||||
 | 
					        JSON_NAME="$BASENAME.json";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        tar cfz "$TAR_NAME" -C openwrt/bin/targets/ .
 | 
				
			||||||
 | 
					        curl -s -u $GH_BUILD_USERNAME:$GH_BUILD_PASSWORD -T "$TAR_NAME" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/$LOWERCASE_TARGET/"$TAR_NAME""
 | 
				
			||||||
 | 
					        IMG_NAME="$BASENAME-upgrade.bin";
 | 
				
			||||||
 | 
					        TIP_VERSION="$(grep DISTRIB_TIP= openwrt/tmp/openwrt_release | cut -d\' -f2)"
 | 
				
			||||||
 | 
					        echo -e "{\n\t\"image\":\""${IMG_NAME}"\",\n\t\"revision\": \""${TIP_VERSION}"\",\n\t\"timestamp\":\""$(date +%s)"\",\n\t\"compatible\": \""${LOWERCASE_TARGET}"\"\n}" > latest-upgrade.json
 | 
				
			||||||
 | 
					        [ -f openwrt/tmp/image-file ] && curl -s -u $GH_BUILD_USERNAME:$GH_BUILD_PASSWORD -T "openwrt/$(cat openwrt/tmp/image-file)" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/$LOWERCASE_TARGET/"$IMG_NAME""
 | 
				
			||||||
 | 
					        [ -f openwrt/tmp/image-file ] && curl -s -u $GH_BUILD_USERNAME:$GH_BUILD_PASSWORD -T "latest-upgrade.json" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/$LOWERCASE_TARGET/latest-upgrade.json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/octet-stream" "openwrt/$(cat openwrt/tmp/image-file)" "s3://$AWS_S3_BUCKET_NAME/$IMG_NAME"
 | 
				
			||||||
 | 
					        [ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$IMG_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
 | 
				
			||||||
 | 
					        [ -f openwrt/tmp/image-file ] && aws s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
 | 
				
			||||||
 | 
					        [ -f openwrt/tmp/image-file ] && aws s3api put-object-tagging --bucket "$AWS_S3_BUCKET_NAME" --key "$JSON_NAME" --tagging "{\"TagSet\":[{\"Key\":\"release\",\"Value\":\"$IS_RELEASE\"}]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [[ ${{ matrix.target }} == 'x64_vm' ]]; then
 | 
				
			||||||
 | 
					          echo ::set-output name=x64_vm_image_name::"$(echo $IMG_NAME)"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  create-x64_vm-ami:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    needs: build
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        ref: WIFI-7206-add-workflow-to-build-virtual-ap-image
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Use create-ami-from-image composite action
 | 
				
			||||||
 | 
					      uses: ./.github/actions/create-ami-from-image
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        firmware_image_name: ${{ needs.build.outputs.x64_vm_image_name }}
 | 
				
			||||||
 | 
					        firmware_image_s3_bucket: ${{ env.AWS_S3_BUCKET_NAME }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ qcom_setup_interfaces()
 | 
				
			|||||||
	edgecore,eap106|\
 | 
						edgecore,eap106|\
 | 
				
			||||||
	qcom,ipq5018-mp03.3|\
 | 
						qcom,ipq5018-mp03.3|\
 | 
				
			||||||
	yuncore,ax840|\
 | 
						yuncore,ax840|\
 | 
				
			||||||
 | 
						motorola,q14|\
 | 
				
			||||||
	sercomm,wallaby)
 | 
						sercomm,wallaby)
 | 
				
			||||||
		ucidef_set_interface_lan "eth0"
 | 
							ucidef_set_interface_lan "eth0"
 | 
				
			||||||
		ucidef_set_interface_wan "eth1"
 | 
							ucidef_set_interface_wan "eth1"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,13 +107,22 @@ ath11k/IPQ5018/hw1.0/caldata.bin)
 | 
				
			|||||||
	case "$board" in
 | 
						case "$board" in
 | 
				
			||||||
	cybertan,eww622-a1|\
 | 
						cybertan,eww622-a1|\
 | 
				
			||||||
	edgecore,eap104|\
 | 
						edgecore,eap104|\
 | 
				
			||||||
 | 
						motorola,q14|\
 | 
				
			||||||
	qcom,ipq5018-mp03.1)
 | 
						qcom,ipq5018-mp03.1)
 | 
				
			||||||
                caldata_extract "0:ART" 0x1000 0x20000  
 | 
					                caldata_extract "0:ART" 0x1000 0x20000  
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
	;;
 | 
						;;
 | 
				
			||||||
 | 
					ath11k/qcn6122/hw1.0/caldata_1.bin)
 | 
				
			||||||
 | 
						case "$board" in
 | 
				
			||||||
 | 
						motorola,q14)
 | 
				
			||||||
 | 
					                caldata_extract "0:ART" 0x26800 0x20000  
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						;;
 | 
				
			||||||
ath11k/qcn6122/hw1.0/caldata_2.bin)
 | 
					ath11k/qcn6122/hw1.0/caldata_2.bin)
 | 
				
			||||||
	case "$board" in
 | 
						case "$board" in
 | 
				
			||||||
 | 
						motorola,q14|\
 | 
				
			||||||
	edgecore,eap104)
 | 
						edgecore,eap104)
 | 
				
			||||||
                caldata_extract "0:ART" 0x4c000 0x20000  
 | 
					                caldata_extract "0:ART" 0x4c000 0x20000  
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,4 +19,12 @@ boot() {
 | 
				
			|||||||
		ssdk_sh debug phy set 8 0x4004c441 0x8
 | 
							ssdk_sh debug phy set 8 0x4004c441 0x8
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case "$(board_name)" in
 | 
				
			||||||
 | 
						cig,wf196)
 | 
				
			||||||
 | 
							# setup the leds
 | 
				
			||||||
 | 
							ssdk_sh debug phy set 0 0x401ec431 0xc00f
 | 
				
			||||||
 | 
							ssdk_sh debug phy set 0 0x401ec430 0x806f
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,13 +4,15 @@ START=99
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
boot() {
 | 
					boot() {
 | 
				
			||||||
	case "$(board_name)" in
 | 
						case "$(board_name)" in
 | 
				
			||||||
 | 
						hfcl,ion4xe|\
 | 
				
			||||||
 | 
						hfcl,ion4xi)
 | 
				
			||||||
 | 
							fw_setenv boot_count 0
 | 
				
			||||||
 | 
							;;		
 | 
				
			||||||
	edgecore,eap101|\
 | 
						edgecore,eap101|\
 | 
				
			||||||
	edgecore,eap102)
 | 
						edgecore,eap102)
 | 
				
			||||||
		avail=$(fw_printenv -n upgrade_available)
 | 
							avail=$(fw_printenv -n upgrade_available)
 | 
				
			||||||
		[ ${avail} -eq 0 ] || {
 | 
							[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1
 | 
				
			||||||
		fw_setenv bootcount 0
 | 
							fw_setenv bootcount 0
 | 
				
			||||||
			fw_setenv upgrade_available 0
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,8 @@
 | 
				
			|||||||
. /lib/functions/system.sh
 | 
					. /lib/functions/system.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RAMFS_COPY_BIN='fw_printenv fw_setenv'
 | 
				
			||||||
 | 
					RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qca_do_upgrade() {
 | 
					qca_do_upgrade() {
 | 
				
			||||||
        local tar_file="$1"
 | 
					        local tar_file="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,6 +19,50 @@ qca_do_upgrade() {
 | 
				
			|||||||
        fi
 | 
					        fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_mmc_part() {
 | 
				
			||||||
 | 
						local DEVNAME PARTNAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if grep -q "$1" /proc/mtd; then
 | 
				
			||||||
 | 
							echo "" && return 0
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for DEVNAME in /sys/block/mmcblk*/mmcblk*p*; do
 | 
				
			||||||
 | 
							PARTNAME=$(grep PARTNAME ${DEVNAME}/uevent | cut -f2 -d'=')
 | 
				
			||||||
 | 
							[ "$PARTNAME" = "$1" ] && echo "/dev/$(basename $DEVNAME)" && return 0
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					do_flash_emmc() {
 | 
				
			||||||
 | 
						local tar_file=$1
 | 
				
			||||||
 | 
						local emmcblock=$(find_mmc_part $2)
 | 
				
			||||||
 | 
						local board_dir=$3
 | 
				
			||||||
 | 
						local part=$4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[ -z "$emmcblock" ] && {
 | 
				
			||||||
 | 
							echo failed to find $2
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echo erase $4
 | 
				
			||||||
 | 
						dd if=/dev/zero of=${emmcblock}
 | 
				
			||||||
 | 
						echo flash $4
 | 
				
			||||||
 | 
						tar Oxf $tar_file ${board_dir}/$part | dd of=${emmcblock}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					emmc_do_upgrade() {
 | 
				
			||||||
 | 
						local tar_file="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
 | 
				
			||||||
 | 
						board_dir=${board_dir%/}
 | 
				
			||||||
 | 
						do_flash_emmc $tar_file '0:HLOS' $board_dir kernel
 | 
				
			||||||
 | 
						do_flash_emmc $tar_file 'rootfs' $board_dir root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local emmcblock="$(find_mmc_part "rootfs_data")"
 | 
				
			||||||
 | 
					        if [ -e "$emmcblock" ]; then
 | 
				
			||||||
 | 
					                mkfs.ext4 "$emmcblock"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
platform_check_image() {
 | 
					platform_check_image() {
 | 
				
			||||||
	local magic_long="$(get_magic_long "$1")"
 | 
						local magic_long="$(get_magic_long "$1")"
 | 
				
			||||||
	board=$(board_name)
 | 
						board=$(board_name)
 | 
				
			||||||
@@ -39,6 +86,7 @@ platform_check_image() {
 | 
				
			|||||||
	tplink,ex227|\
 | 
						tplink,ex227|\
 | 
				
			||||||
	tplink,ex447|\
 | 
						tplink,ex447|\
 | 
				
			||||||
	yuncore,ax840|\
 | 
						yuncore,ax840|\
 | 
				
			||||||
 | 
						motorola,q14|\
 | 
				
			||||||
	qcom,ipq6018-cp01|\
 | 
						qcom,ipq6018-cp01|\
 | 
				
			||||||
	qcom,ipq807x-hk01|\
 | 
						qcom,ipq807x-hk01|\
 | 
				
			||||||
	qcom,ipq807x-hk14|\
 | 
						qcom,ipq807x-hk14|\
 | 
				
			||||||
@@ -59,6 +107,9 @@ platform_do_upgrade() {
 | 
				
			|||||||
	cig,wf188)
 | 
						cig,wf188)
 | 
				
			||||||
		qca_do_upgrade $1
 | 
							qca_do_upgrade $1
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
 | 
						motorola,q14)
 | 
				
			||||||
 | 
							emmc_do_upgrade $1
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
	cig,wf188n|\
 | 
						cig,wf188n|\
 | 
				
			||||||
	cig,wf194c|\
 | 
						cig,wf194c|\
 | 
				
			||||||
	cig,wf194c4|\
 | 
						cig,wf194c4|\
 | 
				
			||||||
@@ -67,8 +118,6 @@ platform_do_upgrade() {
 | 
				
			|||||||
	edgecore,eap104|\
 | 
						edgecore,eap104|\
 | 
				
			||||||
	glinet,ax1800|\
 | 
						glinet,ax1800|\
 | 
				
			||||||
	glinet,axt1800|\
 | 
						glinet,axt1800|\
 | 
				
			||||||
	hfcl,ion4xi|\
 | 
					 | 
				
			||||||
	hfcl,ion4xe|\
 | 
					 | 
				
			||||||
	qcom,ipq6018-cp01|\
 | 
						qcom,ipq6018-cp01|\
 | 
				
			||||||
	qcom,ipq807x-hk01|\
 | 
						qcom,ipq807x-hk01|\
 | 
				
			||||||
	qcom,ipq807x-hk14|\
 | 
						qcom,ipq807x-hk14|\
 | 
				
			||||||
@@ -80,12 +129,36 @@ platform_do_upgrade() {
 | 
				
			|||||||
	tplink,ex227)	
 | 
						tplink,ex227)	
 | 
				
			||||||
		nand_upgrade_tar "$1"
 | 
							nand_upgrade_tar "$1"
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	edgecore,eap106|\
 | 
						hfcl,ion4xi|\
 | 
				
			||||||
	edgecore,eap102|\
 | 
						hfcl,ion4xe)
 | 
				
			||||||
	edgecore,eap101)
 | 
							if grep -q rootfs_1 /proc/cmdline; then
 | 
				
			||||||
 | 
								CI_UBIPART="rootfs"
 | 
				
			||||||
 | 
								fw_setenv primary 0 || exit 1
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								CI_UBIPART="rootfs_1"
 | 
				
			||||||
 | 
								fw_setenv primary 1 || exit 1
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							nand_upgrade_tar "$1"
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						edgecore,eap106)
 | 
				
			||||||
		CI_UBIPART="rootfs1"
 | 
							CI_UBIPART="rootfs1"
 | 
				
			||||||
		[ "$(find_mtd_chardev rootfs)" ] && CI_UBIPART="rootfs"
 | 
							[ "$(find_mtd_chardev rootfs)" ] && CI_UBIPART="rootfs"
 | 
				
			||||||
		nand_upgrade_tar "$1"
 | 
							nand_upgrade_tar "$1"
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
 | 
						edgecore,eap101|\
 | 
				
			||||||
 | 
						edgecore,eap102)
 | 
				
			||||||
 | 
							if [ "$(find_mtd_chardev rootfs)" ]; then
 | 
				
			||||||
 | 
								CI_UBIPART="rootfs"
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								if grep -q rootfs1 /proc/cmdline; then
 | 
				
			||||||
 | 
									CI_UBIPART="rootfs2"
 | 
				
			||||||
 | 
									fw_setenv active 2 || exit 1
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									CI_UBIPART="rootfs1"
 | 
				
			||||||
 | 
									fw_setenv active 1 || exit 1
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							nand_upgrade_tar "$1"
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,17 @@ define Device/edgecore_eap104
 | 
				
			|||||||
endef
 | 
					endef
 | 
				
			||||||
TARGET_DEVICES += edgecore_eap104
 | 
					TARGET_DEVICES += edgecore_eap104
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Device/motorola_q14
 | 
				
			||||||
 | 
					  DEVICE_TITLE := Motorola Q14
 | 
				
			||||||
 | 
					  DEVICE_DTS := qcom-ipq5018-q14
 | 
				
			||||||
 | 
					  SUPPORTED_DEVICES := motorola,q14
 | 
				
			||||||
 | 
					  DEVICE_PACKAGES := ath11k-wifi-motorola-q14 ath11k-firmware-ipq50xx-spruce ath11k-firmware-qcn6122
 | 
				
			||||||
 | 
					  DEVICE_DTS_CONFIG := config@mp03.5-c1
 | 
				
			||||||
 | 
					  IMAGES := sysupgrade.tar mmc-factory.bin
 | 
				
			||||||
 | 
					  IMAGE/mmc-factory.bin := append-ubi | qsdk-ipq-factory-mmc
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					#TARGET_DEVICES += motorola_q14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Device/qcom_mp03_1
 | 
					define Device/qcom_mp03_1
 | 
				
			||||||
  DEVICE_TITLE := Qualcomm Maple 03.1
 | 
					  DEVICE_TITLE := Qualcomm Maple 03.1
 | 
				
			||||||
  DEVICE_DTS := qcom-ipq5018-mp03.1
 | 
					  DEVICE_DTS := qcom-ipq5018-mp03.1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,16 +1,5 @@
 | 
				
			|||||||
KERNEL_LOADADDR := 0x41008000
 | 
					KERNEL_LOADADDR := 0x41008000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Device/cig_wf188
 | 
					 | 
				
			||||||
  DEVICE_TITLE := Cigtech WF-188
 | 
					 | 
				
			||||||
  DEVICE_DTS := qcom-ipq6018-cig-wf188
 | 
					 | 
				
			||||||
  DEVICE_DTS_CONFIG := config@cp03-c1
 | 
					 | 
				
			||||||
  SUPPORTED_DEVICES := cig,wf188
 | 
					 | 
				
			||||||
  IMAGES := sysupgrade.tar
 | 
					 | 
				
			||||||
  IMAGE/sysupgrade.tar/squashfs := append-rootfs | pad-rootfs | sysupgrade-tar rootfs=$$$$@ | append-metadata
 | 
					 | 
				
			||||||
  DEVICE_PACKAGES := ath11k-wifi-cig-wf188 uboot-env
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
TARGET_DEVICES += cig_wf188
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Device/cig_wf188n
 | 
					define Device/cig_wf188n
 | 
				
			||||||
  DEVICE_TITLE := Cigtech WF-188n
 | 
					  DEVICE_TITLE := Cigtech WF-188n
 | 
				
			||||||
  DEVICE_DTS := qcom-ipq6018-cig-wf188n
 | 
					  DEVICE_DTS := qcom-ipq6018-cig-wf188n
 | 
				
			||||||
@@ -43,7 +32,7 @@ define Device/edgecore_eap101
 | 
				
			|||||||
  DEVICE_DTS := qcom-ipq6018-edgecore-eap101
 | 
					  DEVICE_DTS := qcom-ipq6018-edgecore-eap101
 | 
				
			||||||
  DEVICE_DTS_CONFIG := config@cp01-c1
 | 
					  DEVICE_DTS_CONFIG := config@cp01-c1
 | 
				
			||||||
  SUPPORTED_DEVICES := edgecore,eap101
 | 
					  SUPPORTED_DEVICES := edgecore,eap101
 | 
				
			||||||
  DEVICE_PACKAGES := ath11k-wifi-edgecore-eap101 uboot-envtools
 | 
					  DEVICE_PACKAGES := ath11k-wifi-edgecore-eap101 uboot-envtools -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3 kmod-usb2
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
TARGET_DEVICES += edgecore_eap101
 | 
					TARGET_DEVICES += edgecore_eap101
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,7 +41,7 @@ define Device/wallys_dr6018
 | 
				
			|||||||
  DEVICE_DTS := qcom-ipq6018-wallys-dr6018
 | 
					  DEVICE_DTS := qcom-ipq6018-wallys-dr6018
 | 
				
			||||||
  DEVICE_DTS_CONFIG := config@cp01-c4
 | 
					  DEVICE_DTS_CONFIG := config@cp01-c4
 | 
				
			||||||
  SUPPORTED_DEVICES := wallys,dr6018
 | 
					  SUPPORTED_DEVICES := wallys,dr6018
 | 
				
			||||||
  DEVICE_PACKAGES := ath11k-wifi-wallys-dr6018 uboot-envtools
 | 
					  DEVICE_PACKAGES := ath11k-wifi-wallys-dr6018 uboot-envtools -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3 kmod-usb2
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
TARGET_DEVICES += wallys_dr6018
 | 
					TARGET_DEVICES += wallys_dr6018
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,7 +76,7 @@ define Device/glinet_axt1800
 | 
				
			|||||||
  DEVICE_DTS := qcom-ipq6018-gl-axt1800
 | 
					  DEVICE_DTS := qcom-ipq6018-gl-axt1800
 | 
				
			||||||
  SUPPORTED_DEVICES := glinet,axt1800
 | 
					  SUPPORTED_DEVICES := glinet,axt1800
 | 
				
			||||||
  DEVICE_DTS_CONFIG := config@cp03-c1
 | 
					  DEVICE_DTS_CONFIG := config@cp03-c1
 | 
				
			||||||
  DEVICE_PACKAGES := ath11k-wifi-gl-ax1800 -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3
 | 
					  DEVICE_PACKAGES := ath11k-wifi-gl-axt1800 -kmod-usb-dwc3-of-simple kmod-usb-dwc3-qcom kmod-usb3
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
TARGET_DEVICES += glinet_axt1800
 | 
					TARGET_DEVICES += glinet_axt1800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					From fd65e5a95d08389444e8591a20538b3edece0e15 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
 | 
				
			||||||
 | 
					Date: Fri, 31 Jul 2020 19:26:16 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] net: bridge: clear bridge's private skb space on xmit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We need to clear all of the bridge private skb variables as they can be
 | 
				
			||||||
 | 
					stale due to the packet being recirculated through the stack and then
 | 
				
			||||||
 | 
					transmitted through the bridge device. Similar memset is already done on
 | 
				
			||||||
 | 
					bridge's input. We've seen cases where proxyarp_replied was 1 on routed
 | 
				
			||||||
 | 
					multicast packets transmitted through the bridge to ports with neigh
 | 
				
			||||||
 | 
					suppress which were getting dropped. Same thing can in theory happen with
 | 
				
			||||||
 | 
					the port isolation bit as well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fixes: 821f1b21cabb ("bridge: add new BR_NEIGH_SUPPRESS port flag to suppress arp and nd flood")
 | 
				
			||||||
 | 
					Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
 | 
				
			||||||
 | 
					Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 net/bridge/br_device.c | 2 ++
 | 
				
			||||||
 | 
					 1 file changed, 2 insertions(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
 | 
				
			||||||
 | 
					index 8c7b78f8bc23..9a2fb4aa1a10 100644
 | 
				
			||||||
 | 
					--- a/net/bridge/br_device.c
 | 
				
			||||||
 | 
					+++ b/net/bridge/br_device.c
 | 
				
			||||||
 | 
					@@ -36,6 +36,8 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
				
			||||||
 | 
					 	const unsigned char *dest;
 | 
				
			||||||
 | 
					 	u16 vid = 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	memset(skb->cb, 0, sizeof(struct br_input_skb_cb));
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	rcu_read_lock();
 | 
				
			||||||
 | 
					 	nf_ops = rcu_dereference(nf_br_ops);
 | 
				
			||||||
 | 
					 	if (nf_ops && nf_ops->br_dev_xmit_hook(skb)) {
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					From: Shmulik Ladkani <shmulik.ladkani@gmail.com>
 | 
				
			||||||
 | 
					Date: Thu, 13 Oct 2016 09:06:41 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] net/sched: act_mirred: Rename tcfm_ok_push to
 | 
				
			||||||
 | 
					 tcfm_mac_header_xmit and make it a bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					'tcfm_ok_push' specifies whether a mac_len sized push is needed upon
 | 
				
			||||||
 | 
					egress to the target device (if action is performed at ingress).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rename it to 'tcfm_mac_header_xmit' as this is actually an attribute of
 | 
				
			||||||
 | 
					the target device (and use a bool instead of int).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This allows to decouple the attribute from the action to be taken.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
 | 
				
			||||||
 | 
					Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
 | 
				
			||||||
 | 
					Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/include/net/tc_act/tc_mirred.h
 | 
				
			||||||
 | 
					+++ b/include/net/tc_act/tc_mirred.h
 | 
				
			||||||
 | 
					@@ -7,7 +7,7 @@ struct tcf_mirred {
 | 
				
			||||||
 | 
					 	struct tcf_common	common;
 | 
				
			||||||
 | 
					 	int			tcfm_eaction;
 | 
				
			||||||
 | 
					 	int			tcfm_ifindex;
 | 
				
			||||||
 | 
					-	int			tcfm_ok_push;
 | 
				
			||||||
 | 
					+	bool			tcfm_mac_header_xmit;
 | 
				
			||||||
 | 
					 	struct net_device __rcu	*tcfm_dev;
 | 
				
			||||||
 | 
					 	struct list_head	tcfm_list;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					--- a/net/sched/act_mirred.c
 | 
				
			||||||
 | 
					+++ b/net/sched/act_mirred.c
 | 
				
			||||||
 | 
					@@ -55,10 +55,11 @@ static int tcf_mirred_init(struct net *n
 | 
				
			||||||
 | 
					 			   int bind)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct nlattr *tb[TCA_MIRRED_MAX + 1];
 | 
				
			||||||
 | 
					+	bool mac_header_xmit = false;
 | 
				
			||||||
 | 
					 	struct tc_mirred *parm;
 | 
				
			||||||
 | 
					 	struct tcf_mirred *m;
 | 
				
			||||||
 | 
					 	struct net_device *dev;
 | 
				
			||||||
 | 
					-	int ret, ok_push = 0;
 | 
				
			||||||
 | 
					+	int ret;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (nla == NULL)
 | 
				
			||||||
 | 
					 		return -EINVAL;
 | 
				
			||||||
 | 
					@@ -86,10 +87,10 @@ static int tcf_mirred_init(struct net *n
 | 
				
			||||||
 | 
					 		case ARPHRD_IPGRE:
 | 
				
			||||||
 | 
					 		case ARPHRD_VOID:
 | 
				
			||||||
 | 
					 		case ARPHRD_NONE:
 | 
				
			||||||
 | 
					-			ok_push = 0;
 | 
				
			||||||
 | 
					+			mac_header_xmit = false;
 | 
				
			||||||
 | 
					 			break;
 | 
				
			||||||
 | 
					 		default:
 | 
				
			||||||
 | 
					-			ok_push = 1;
 | 
				
			||||||
 | 
					+			mac_header_xmit = true;
 | 
				
			||||||
 | 
					 			break;
 | 
				
			||||||
 | 
					 		}
 | 
				
			||||||
 | 
					 	} else {
 | 
				
			||||||
 | 
					@@ -123,7 +124,7 @@ static int tcf_mirred_init(struct net *n
 | 
				
			||||||
 | 
					 			dev_put(rcu_dereference_protected(m->tcfm_dev, 1));
 | 
				
			||||||
 | 
					 		dev_hold(dev);
 | 
				
			||||||
 | 
					 		rcu_assign_pointer(m->tcfm_dev, dev);
 | 
				
			||||||
 | 
					-		m->tcfm_ok_push = ok_push;
 | 
				
			||||||
 | 
					+		m->tcfm_mac_header_xmit = mac_header_xmit;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (ret == ACT_P_CREATED) {
 | 
				
			||||||
 | 
					@@ -169,7 +170,7 @@ static int tcf_mirred(struct sk_buff *sk
 | 
				
			||||||
 | 
					 		goto out;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (!(at & AT_EGRESS)) {
 | 
				
			||||||
 | 
					-		if (m->tcfm_ok_push)
 | 
				
			||||||
 | 
					+		if (m->tcfm_mac_header_xmit)
 | 
				
			||||||
 | 
					 			skb_push_rcsum(skb2, skb->mac_len);
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					From: Shmulik Ladkani <shmulik.ladkani@gmail.com>
 | 
				
			||||||
 | 
					Date: Thu, 13 Oct 2016 09:06:42 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] net/sched: act_mirred: Refactor detection whether dev needs
 | 
				
			||||||
 | 
					 xmit at mac header
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Move detection logic that tests whether device expects skb data to point
 | 
				
			||||||
 | 
					at mac_header upon xmit into a function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
 | 
				
			||||||
 | 
					Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
 | 
				
			||||||
 | 
					Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/net/sched/act_mirred.c
 | 
				
			||||||
 | 
					+++ b/net/sched/act_mirred.c
 | 
				
			||||||
 | 
					@@ -80,19 +80,7 @@ static int tcf_mirred_init(struct net *n
 | 
				
			||||||
 | 
					 		dev = __dev_get_by_index(net, parm->ifindex);
 | 
				
			||||||
 | 
					 		if (dev == NULL)
 | 
				
			||||||
 | 
					 			return -ENODEV;
 | 
				
			||||||
 | 
					-		switch (dev->type) {
 | 
				
			||||||
 | 
					-		case ARPHRD_TUNNEL:
 | 
				
			||||||
 | 
					-		case ARPHRD_TUNNEL6:
 | 
				
			||||||
 | 
					-		case ARPHRD_SIT:
 | 
				
			||||||
 | 
					-		case ARPHRD_IPGRE:
 | 
				
			||||||
 | 
					-		case ARPHRD_VOID:
 | 
				
			||||||
 | 
					-		case ARPHRD_NONE:
 | 
				
			||||||
 | 
					-			mac_header_xmit = false;
 | 
				
			||||||
 | 
					-			break;
 | 
				
			||||||
 | 
					-		default:
 | 
				
			||||||
 | 
					-			mac_header_xmit = true;
 | 
				
			||||||
 | 
					-			break;
 | 
				
			||||||
 | 
					-		}
 | 
				
			||||||
 | 
					+		mac_header_xmit = dev_is_mac_header_xmit(dev);
 | 
				
			||||||
 | 
					 	} else {
 | 
				
			||||||
 | 
					 		dev = NULL;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
@@ -0,0 +1,125 @@
 | 
				
			|||||||
 | 
					From: Shmulik Ladkani <shmulik.ladkani@gmail.com>
 | 
				
			||||||
 | 
					Date: Thu, 13 Oct 2016 09:06:44 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] net/sched: act_mirred: Implement ingress actions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Up until now, 'action mirred' supported only egress actions (either
 | 
				
			||||||
 | 
					TCA_EGRESS_REDIR or TCA_EGRESS_MIRROR).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This patch implements the corresponding ingress actions
 | 
				
			||||||
 | 
					TCA_INGRESS_REDIR and TCA_INGRESS_MIRROR.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This allows attaching filters whose target is to hand matching skbs into
 | 
				
			||||||
 | 
					the rx processing of a specified device.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
 | 
				
			||||||
 | 
					Cc: Jamal Hadi Salim <jhs@mojatatu.com>
 | 
				
			||||||
 | 
					Cc: Eric Dumazet <eric.dumazet@gmail.com>
 | 
				
			||||||
 | 
					Cc: Cong Wang <xiyou.wangcong@gmail.com>
 | 
				
			||||||
 | 
					Tested-by: Jamal Hadi Salim <jhs@mojatatu.com>
 | 
				
			||||||
 | 
					Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
 | 
				
			||||||
 | 
					Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/net/sched/act_mirred.c
 | 
				
			||||||
 | 
					+++ b/net/sched/act_mirred.c
 | 
				
			||||||
 | 
					@@ -33,6 +33,25 @@
 | 
				
			||||||
 | 
					 static LIST_HEAD(mirred_list);
 | 
				
			||||||
 | 
					 static DEFINE_SPINLOCK(mirred_list_lock);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+static bool tcf_mirred_is_act_redirect(int action)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	return action == TCA_EGRESS_REDIR || action == TCA_INGRESS_REDIR;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+static u32 tcf_mirred_act_direction(int action)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	switch (action) {
 | 
				
			||||||
 | 
					+	case TCA_EGRESS_REDIR:
 | 
				
			||||||
 | 
					+	case TCA_EGRESS_MIRROR:
 | 
				
			||||||
 | 
					+		return AT_EGRESS;
 | 
				
			||||||
 | 
					+	case TCA_INGRESS_REDIR:
 | 
				
			||||||
 | 
					+	case TCA_INGRESS_MIRROR:
 | 
				
			||||||
 | 
					+		return AT_INGRESS;
 | 
				
			||||||
 | 
					+	default:
 | 
				
			||||||
 | 
					+		BUG();
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 static void tcf_mirred_release(struct tc_action *a, int bind)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct tcf_mirred *m = to_mirred(a);
 | 
				
			||||||
 | 
					@@ -72,6 +91,8 @@ static int tcf_mirred_init(struct net *n
 | 
				
			||||||
 | 
					 	switch (parm->eaction) {
 | 
				
			||||||
 | 
					 	case TCA_EGRESS_MIRROR:
 | 
				
			||||||
 | 
					 	case TCA_EGRESS_REDIR:
 | 
				
			||||||
 | 
					+	case TCA_INGRESS_REDIR:
 | 
				
			||||||
 | 
					+	case TCA_INGRESS_MIRROR:
 | 
				
			||||||
 | 
					 		break;
 | 
				
			||||||
 | 
					 	default:
 | 
				
			||||||
 | 
					 		return -EINVAL;
 | 
				
			||||||
 | 
					@@ -129,9 +150,12 @@ static int tcf_mirred(struct sk_buff *sk
 | 
				
			||||||
 | 
					 		      struct tcf_result *res)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct tcf_mirred *m = a->priv;
 | 
				
			||||||
 | 
					+	bool m_mac_header_xmit;
 | 
				
			||||||
 | 
					 	struct net_device *dev;
 | 
				
			||||||
 | 
					 	struct sk_buff *skb2;
 | 
				
			||||||
 | 
					-	int retval, err;
 | 
				
			||||||
 | 
					+	int retval, err = 0;
 | 
				
			||||||
 | 
					+	int m_eaction;
 | 
				
			||||||
 | 
					+	int mac_len;
 | 
				
			||||||
 | 
					 	u32 at;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	tcf_lastuse_update(&m->tcf_tm);
 | 
				
			||||||
 | 
					@@ -139,6 +163,8 @@ static int tcf_mirred(struct sk_buff *sk
 | 
				
			||||||
 | 
					 	bstats_cpu_update(this_cpu_ptr(m->common.cpu_bstats), skb);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	rcu_read_lock();
 | 
				
			||||||
 | 
					+	m_mac_header_xmit = READ_ONCE(m->tcfm_mac_header_xmit);
 | 
				
			||||||
 | 
					+	m_eaction = READ_ONCE(m->tcfm_eaction);
 | 
				
			||||||
 | 
					 	retval = READ_ONCE(m->tcf_action);
 | 
				
			||||||
 | 
					 	dev = rcu_dereference(m->tcfm_dev);
 | 
				
			||||||
 | 
					 	if (unlikely(!dev)) {
 | 
				
			||||||
 | 
					@@ -157,24 +183,37 @@ static int tcf_mirred(struct sk_buff *sk
 | 
				
			||||||
 | 
					 	if (!skb2)
 | 
				
			||||||
 | 
					 		goto out;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (!(at & AT_EGRESS)) {
 | 
				
			||||||
 | 
					-		if (m->tcfm_mac_header_xmit)
 | 
				
			||||||
 | 
					+	/* If action's target direction differs than filter's direction,
 | 
				
			||||||
 | 
					+	 * and devices expect a mac header on xmit, then mac push/pull is
 | 
				
			||||||
 | 
					+	 * needed.
 | 
				
			||||||
 | 
					+	 */
 | 
				
			||||||
 | 
					+	if (at != tcf_mirred_act_direction(m_eaction) && m_mac_header_xmit) {
 | 
				
			||||||
 | 
					+		if (at & AT_EGRESS) {
 | 
				
			||||||
 | 
					+			/* caught at egress, act ingress: pull mac */
 | 
				
			||||||
 | 
					+			mac_len = skb_network_header(skb) - skb_mac_header(skb);
 | 
				
			||||||
 | 
					+			skb_pull_rcsum(skb2, mac_len);
 | 
				
			||||||
 | 
					+		} else {
 | 
				
			||||||
 | 
					+			/* caught at ingress, act egress: push mac */
 | 
				
			||||||
 | 
					 			skb_push_rcsum(skb2, skb->mac_len);
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	/* mirror is always swallowed */
 | 
				
			||||||
 | 
					-	if (m->tcfm_eaction != TCA_EGRESS_MIRROR)
 | 
				
			||||||
 | 
					+	if (tcf_mirred_is_act_redirect(m_eaction))
 | 
				
			||||||
 | 
					 		skb2->tc_verd = SET_TC_FROM(skb2->tc_verd, at);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	skb2->skb_iif = skb->dev->ifindex;
 | 
				
			||||||
 | 
					 	skb2->dev = dev;
 | 
				
			||||||
 | 
					 	skb_sender_cpu_clear(skb2);
 | 
				
			||||||
 | 
					-	err = dev_queue_xmit(skb2);
 | 
				
			||||||
 | 
					+	if (tcf_mirred_act_direction(m_eaction) & AT_EGRESS)
 | 
				
			||||||
 | 
					+		err = dev_queue_xmit(skb2);
 | 
				
			||||||
 | 
					+	else
 | 
				
			||||||
 | 
					+		err = netif_receive_skb(skb2);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (err) {
 | 
				
			||||||
 | 
					 out:
 | 
				
			||||||
 | 
					 		qstats_overlimit_inc(this_cpu_ptr(m->common.cpu_qstats));
 | 
				
			||||||
 | 
					-		if (m->tcfm_eaction != TCA_EGRESS_MIRROR)
 | 
				
			||||||
 | 
					+		if (tcf_mirred_is_act_redirect(m_eaction))
 | 
				
			||||||
 | 
					 			retval = TC_ACT_SHOT;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 	rcu_read_unlock();
 | 
				
			||||||
							
								
								
									
										55
									
								
								feeds/ipq807x/wireguard/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								feeds/ipq807x/wireguard/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (C) 2016-2019 Jason A. Donenfeld <Jason@zx2c4.com>
 | 
				
			||||||
 | 
					# Copyright (C) 2016 Baptiste Jonglez <openwrt@bitsofnetworks.org>
 | 
				
			||||||
 | 
					# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This is free software, licensed under the GNU General Public License v2.
 | 
				
			||||||
 | 
					# See /LICENSE for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(TOPDIR)/rules.mk
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/kernel.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_NAME:=wireguard-backport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_VERSION:=1.0.20211208
 | 
				
			||||||
 | 
					PKG_RELEASE:=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_SOURCE:=wireguard-linux-compat-$(PKG_VERSION).tar.xz
 | 
				
			||||||
 | 
					PKG_SOURCE_URL:=https://git.zx2c4.com/wireguard-linux-compat/snapshot/
 | 
				
			||||||
 | 
					PKG_HASH:=c0e607138a17daac656f508d8e63ea3737b5221fa5d9288191ddeb099f5a3b92
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_LICENSE:=GPL-2.0
 | 
				
			||||||
 | 
					PKG_LICENSE_FILES:=COPYING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/wireguard-linux-compat-$(PKG_VERSION)
 | 
				
			||||||
 | 
					PKG_BUILD_PARALLEL:=1
 | 
				
			||||||
 | 
					PKG_USE_MIPS16:=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# WireGuard's makefile needs this to know where to build the kernel module
 | 
				
			||||||
 | 
					export KERNELDIR:=$(LINUX_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/package.mk
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/kernel-defaults.mk
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/package-defaults.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Build/Compile
 | 
				
			||||||
 | 
						$(MAKE) $(KERNEL_MAKEOPTS) M="$(PKG_BUILD_DIR)/src" modules
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define KernelPackage/wireguard-backport
 | 
				
			||||||
 | 
					  SECTION:=kernel
 | 
				
			||||||
 | 
					  CATEGORY:=Kernel modules
 | 
				
			||||||
 | 
					  SUBMENU:=Network Support
 | 
				
			||||||
 | 
					  TITLE:=WireGuard kernel module
 | 
				
			||||||
 | 
					  DEPENDS:=+IPV6:kmod-udptunnel6 +kmod-udptunnel4
 | 
				
			||||||
 | 
					  FILES:= $(PKG_BUILD_DIR)/src/wireguard.$(LINUX_KMOD_SUFFIX)
 | 
				
			||||||
 | 
					  AUTOLOAD:=$(call AutoProbe,wireguard)
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define KernelPackage/wireguard-backport/description
 | 
				
			||||||
 | 
					  $(call Package/wireguard/Default/description)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This package provides the kernel module for WireGuard.
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(eval $(call KernelPackage,wireguard-backport))
 | 
				
			||||||
							
								
								
									
										29
									
								
								feeds/ipq807x/wireguard/patches/100-compat.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								feeds/ipq807x/wireguard/patches/100-compat.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					Index: wireguard-linux-compat-1.0.20211208/src/compat/compat.h
 | 
				
			||||||
 | 
					===================================================================
 | 
				
			||||||
 | 
					--- wireguard-linux-compat-1.0.20211208.orig/src/compat/compat.h
 | 
				
			||||||
 | 
					+++ wireguard-linux-compat-1.0.20211208/src/compat/compat.h
 | 
				
			||||||
 | 
					@@ -11,6 +11,8 @@
 | 
				
			||||||
 | 
					 #include <linux/types.h>
 | 
				
			||||||
 | 
					 #include <generated/utsrelease.h>
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+#define fallthrough
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 #ifdef RHEL_MAJOR
 | 
				
			||||||
 | 
					 #if RHEL_MAJOR == 7
 | 
				
			||||||
 | 
					 #define ISRHEL7
 | 
				
			||||||
 | 
					@@ -686,15 +688,6 @@ struct __compat_dummy_container { char d
 | 
				
			||||||
 | 
					 #define genl_dump_check_consistent(a, b) genl_dump_check_consistent(a, b, &genl_family)
 | 
				
			||||||
 | 
					 #endif
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) && !defined(ISRHEL7)
 | 
				
			||||||
 | 
					-static inline void *skb_put_data(struct sk_buff *skb, const void *data, unsigned int len)
 | 
				
			||||||
 | 
					-{
 | 
				
			||||||
 | 
					-	void *tmp = skb_put(skb, len);
 | 
				
			||||||
 | 
					-	memcpy(tmp, data, len);
 | 
				
			||||||
 | 
					-	return tmp;
 | 
				
			||||||
 | 
					-}
 | 
				
			||||||
 | 
					-#endif
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) && !defined(ISRHEL7)
 | 
				
			||||||
 | 
					 #define napi_complete_done(n, work_done) napi_complete(n)
 | 
				
			||||||
 | 
					 #endif
 | 
				
			||||||
@@ -2,6 +2,17 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
START=80
 | 
					START=80
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					copy_certificates() {
 | 
				
			||||||
 | 
						[ -f /certificates/dev-id ] || return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cp /certificates/*.pem /etc/ucentral/
 | 
				
			||||||
 | 
						cp /certificates/dev-id /etc/ucentral/
 | 
				
			||||||
 | 
						chown root.network /etc/ucentral/*.pem
 | 
				
			||||||
 | 
						chmod 0440 root.network /etc/ucentral/*.pem
 | 
				
			||||||
 | 
						chmod 0400 /etc/ucentral/dev-id
 | 
				
			||||||
 | 
						exit 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
boot() {
 | 
					boot() {
 | 
				
			||||||
	[ -f /etc/ucentral/dev-id ] && return
 | 
						[ -f /etc/ucentral/dev-id ] && return
 | 
				
			||||||
	. /lib/functions.sh
 | 
						. /lib/functions.sh
 | 
				
			||||||
@@ -17,11 +28,49 @@ boot() {
 | 
				
			|||||||
			[ -e /dev/ubi1 ] && mount -t ubifs ubi1:certificates /certificates
 | 
								[ -e /dev/ubi1 ] && mount -t ubifs ubi1:certificates /certificates
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	[ -f /certificates/dev-id ] && {
 | 
						copy_certificates
 | 
				
			||||||
		cp /certificates/*.pem /etc/ucentral/
 | 
					
 | 
				
			||||||
		cp /certificates/dev-id /etc/ucentral/
 | 
						# if we get here no valid certificates were found
 | 
				
			||||||
		chown root.network /etc/ucentral/*.pem 
 | 
					
 | 
				
			||||||
		chmod 0440 root.network /etc/ucentral/*.pem
 | 
						. /lib/functions.sh
 | 
				
			||||||
		chmod 0400 /etc/ucentral/dev-id
 | 
					
 | 
				
			||||||
	}
 | 
						local PART_NAME
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case "$(board_name)" in
 | 
				
			||||||
 | 
						actiontec,web7200)
 | 
				
			||||||
 | 
							if grep -q bootselect=0 /proc/cmdline; then
 | 
				
			||||||
 | 
								PART_NAME=firmware2
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								PART_NAME=firmware1
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						edgecore,ecw5211|\
 | 
				
			||||||
 | 
						edgecore,eap101|\
 | 
				
			||||||
 | 
						edgecore,eap102)
 | 
				
			||||||
 | 
							if grep -q rootfs1 /proc/cmdline; then
 | 
				
			||||||
 | 
								PART_NAME=rootfs2
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								PART_NAME=rootfs1
 | 
				
			||||||
 | 
							fi	
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						hfcl,ion4xi|\
 | 
				
			||||||
 | 
						hfcl,ion4xe)
 | 
				
			||||||
 | 
							if grep -q rootfs_1 /proc/cmdline; then
 | 
				
			||||||
 | 
								PART_NAME=rootfs
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								PART_NAME=rootfs_1
 | 
				
			||||||
 | 
							fi	
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						*)
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local MTD=$(find_mtd_index $PART_NAME)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[ -z "$MTD" ] && return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ubiattach -m $MTD -d 3
 | 
				
			||||||
 | 
						[ -e /dev/ubi3 ] && mount -t ubifs ubi3:certificates /certificates
 | 
				
			||||||
 | 
						copy_certificates
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,13 +8,13 @@ PROG=/usr/bin/ucode
 | 
				
			|||||||
start_service() {
 | 
					start_service() {
 | 
				
			||||||
	[ -f /etc/ucentral/capabilities.json ] || {
 | 
						[ -f /etc/ucentral/capabilities.json ] || {
 | 
				
			||||||
		mkdir -p /etc/ucentral/
 | 
							mkdir -p /etc/ucentral/
 | 
				
			||||||
		ucode -m ubus -E board=/etc/board.json /usr/share/ucentral/capabilities.uc > /etc/ucentral/capabilities.json 
 | 
							/usr/share/ucentral/capabilities.uc
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/usr/share/ucentral/ucentral.uc /etc/ucentral/ucentral.cfg.0000000001 > /dev/null
 | 
						/usr/share/ucentral/ucentral.uc /etc/ucentral/ucentral.cfg.0000000001 > /dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	procd_open_instance
 | 
						procd_open_instance
 | 
				
			||||||
	procd_set_param command "$PROG" -m uci -m fs -i /usr/share/ucentral/firstcontact.uc
 | 
						procd_set_param command "$PROG" -l uci -l fs /usr/share/ucentral/firstcontact.uc
 | 
				
			||||||
	procd_set_param respawn 1 10 0
 | 
						procd_set_param respawn 1 10 0
 | 
				
			||||||
	procd_close_instance
 | 
						procd_close_instance
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
{%
 | 
					 | 
				
			||||||
let devid;
 | 
					let devid;
 | 
				
			||||||
let fd = fs.open("/etc/ucentral/dev-id", "r");
 | 
					let fd = fs.open("/etc/ucentral/dev-id", "r");
 | 
				
			||||||
if (!fd) {
 | 
					if (!fd) {
 | 
				
			||||||
@@ -62,4 +61,3 @@ system("/etc/init.d/firstcontact disable");
 | 
				
			|||||||
system("reload_config");
 | 
					system("reload_config");
 | 
				
			||||||
system("/etc/init.d/ucentral start");
 | 
					system("/etc/init.d/ucentral start");
 | 
				
			||||||
system("/etc/init.d/firstcontact stop");
 | 
					system("/etc/init.d/firstcontact stop");
 | 
				
			||||||
%}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								feeds/ucentral/radius-gw-proxy/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								feeds/ucentral/radius-gw-proxy/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					include $(TOPDIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_NAME:=radius-gw-proxy
 | 
				
			||||||
 | 
					PKG_RELEASE:=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_LICENSE:=BSD-3-Clause
 | 
				
			||||||
 | 
					PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/package.mk
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/cmake.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/radius-gw-proxy
 | 
				
			||||||
 | 
					  SECTION:=ucentral
 | 
				
			||||||
 | 
					  CATEGORY:=uCentral
 | 
				
			||||||
 | 
					  TITLE:=uCentral Gateway radius-gw-proxy
 | 
				
			||||||
 | 
					  DEPENDS:=+libubox +libubus
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/radius-gw-proxy/install
 | 
				
			||||||
 | 
						$(INSTALL_DIR) $(1)/usr/sbin
 | 
				
			||||||
 | 
						$(INSTALL_BIN) $(PKG_BUILD_DIR)/radius-gw-proxy $(1)/usr/sbin/
 | 
				
			||||||
 | 
						$(CP) ./files/* $(1)
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(eval $(call BuildPackage,radius-gw-proxy))
 | 
				
			||||||
							
								
								
									
										11
									
								
								feeds/ucentral/radius-gw-proxy/files/etc/init.d/radius-gw-proxy
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								feeds/ucentral/radius-gw-proxy/files/etc/init.d/radius-gw-proxy
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					#!/bin/sh /etc/rc.common
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					START=99
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USE_PROCD=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start_service() {
 | 
				
			||||||
 | 
						procd_open_instance
 | 
				
			||||||
 | 
						procd_set_param command "/usr/sbin/radius-gw-proxy"
 | 
				
			||||||
 | 
						procd_close_instance
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										30
									
								
								feeds/ucentral/radius-gw-proxy/src/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								feeds/ucentral/radius-gw-proxy/src/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					cmake_minimum_required(VERSION 2.6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROJECT(radius-gw-proxy C)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ADD_DEFINITIONS(-Wall -Werror)
 | 
				
			||||||
 | 
					IF(CMAKE_C_COMPILER_VERSION VERSION_GREATER 6)
 | 
				
			||||||
 | 
						ADD_DEFINITIONS(-Wextra -Werror=implicit-function-declaration)
 | 
				
			||||||
 | 
						ADD_DEFINITIONS(-Wformat -Werror=format-security -Werror=format-nonliteral)
 | 
				
			||||||
 | 
					ENDIF()
 | 
				
			||||||
 | 
					ADD_DEFINITIONS(-Os -std=gnu99 -g3 -Wmissing-declarations -Wno-unused-parameter -Wno-strict-aliasing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SET(SOURCES main.c)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FIND_LIBRARY(ubus NAMES ubus)
 | 
				
			||||||
 | 
					FIND_LIBRARY(ubox NAMES ubox)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FIND_PATH(ubox_include_dir libubox/uloop.h)
 | 
				
			||||||
 | 
					FIND_PATH(ubus_include_dir NAMES libubus.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INCLUDE_DIRECTORIES(${ubox_include_dir} ${ubus_include_dir})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ADD_EXECUTABLE(radius-gw-proxy ${SOURCES})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TARGET_LINK_LIBRARIES(radius-gw-proxy ${ubox} ${ubus})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INSTALL(TARGETS radius-gw-proxy
 | 
				
			||||||
 | 
						RUNTIME DESTINATION sbin
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										356
									
								
								feeds/ucentral/radius-gw-proxy/src/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										356
									
								
								feeds/ucentral/radius-gw-proxy/src/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,356 @@
 | 
				
			|||||||
 | 
					#define _GNU_SOURCE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <sys/types.h>
 | 
				
			||||||
 | 
					#include <sys/socket.h>
 | 
				
			||||||
 | 
					#include <netinet/in.h>
 | 
				
			||||||
 | 
					#include <net/if.h>
 | 
				
			||||||
 | 
					#include <arpa/inet.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <libubox/uloop.h>
 | 
				
			||||||
 | 
					#include <libubox/usock.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <libubox/avl.h>
 | 
				
			||||||
 | 
					#include <libubox/avl-cmp.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <libubus.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define RAD_PROX_BUFLEN		(4 * 1024)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TLV_STATION_ID		30
 | 
				
			||||||
 | 
					#define TLV_VENDOR		26
 | 
				
			||||||
 | 
					#define TLV_TIP_SERVER_V4	2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TIP_VENDOR		58888
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum socket_type {
 | 
				
			||||||
 | 
						RADIUS_AUTH = 0,
 | 
				
			||||||
 | 
						RADIUS_ACCT,
 | 
				
			||||||
 | 
						RADIUS_DAS
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct radius_socket {
 | 
				
			||||||
 | 
						struct uloop_fd fd;
 | 
				
			||||||
 | 
						enum socket_type type;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct radius_header {
 | 
				
			||||||
 | 
						uint8_t code;
 | 
				
			||||||
 | 
						uint8_t id;
 | 
				
			||||||
 | 
						uint16_t len;
 | 
				
			||||||
 | 
						char auth[16];
 | 
				
			||||||
 | 
						char avp[];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct radius_tlv {
 | 
				
			||||||
 | 
						uint8_t id;
 | 
				
			||||||
 | 
						uint8_t len;
 | 
				
			||||||
 | 
						char data[];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct radius_station_id {
 | 
				
			||||||
 | 
						char id[256];
 | 
				
			||||||
 | 
						enum socket_type type;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct radius_station {
 | 
				
			||||||
 | 
						struct avl_node avl;
 | 
				
			||||||
 | 
						struct radius_station_id key;
 | 
				
			||||||
 | 
						int port;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct ubus_auto_conn conn;
 | 
				
			||||||
 | 
					static uint32_t ucentral;
 | 
				
			||||||
 | 
					static struct blob_buf b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int
 | 
				
			||||||
 | 
					avl_memcmp(const void *k1, const void *k2, void *ptr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return memcmp(k1, k2, sizeof(struct radius_station_id));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static AVL_TREE(radius_stations, avl_memcmp, false, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					radius_station_add(char *id, int port, enum socket_type type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct radius_station *station;
 | 
				
			||||||
 | 
						struct radius_station_id key = { .type = type };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						strcpy(key.id, id);
 | 
				
			||||||
 | 
						station = avl_find_element(&radius_stations, &key, station, avl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!station) {
 | 
				
			||||||
 | 
							printf("new station/port, adding to avl tree\n");
 | 
				
			||||||
 | 
							station = malloc(sizeof(*station));
 | 
				
			||||||
 | 
							memset(station, 0, sizeof(*station));
 | 
				
			||||||
 | 
							strcpy(station->key.id, id);
 | 
				
			||||||
 | 
							station->key.type = type;
 | 
				
			||||||
 | 
							station->avl.key = &station->key;
 | 
				
			||||||
 | 
							avl_insert(&radius_stations, &station->avl);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						station->port = port;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *
 | 
				
			||||||
 | 
					b64(char *src, int len)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						char *dst;
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!src)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						dst = malloc(len * 4);
 | 
				
			||||||
 | 
						ret = b64_encode(src, len, dst, len * 4);
 | 
				
			||||||
 | 
						if (ret < 1) {
 | 
				
			||||||
 | 
							free(dst);
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return dst;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					radius_forward(char *buf, char *server, enum socket_type type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct radius_header *hdr = (struct radius_header *) buf;
 | 
				
			||||||
 | 
						struct ubus_request async = { };
 | 
				
			||||||
 | 
						char *data = b64(buf, hdr->len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!data)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						blob_buf_init(&b, 0);
 | 
				
			||||||
 | 
						switch (type) {
 | 
				
			||||||
 | 
						case RADIUS_AUTH:
 | 
				
			||||||
 | 
							blobmsg_add_string(&b, "radius", "auth");
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case RADIUS_ACCT:
 | 
				
			||||||
 | 
							blobmsg_add_string(&b, "radius", "acct");
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						blobmsg_add_string(&b, "data", data);
 | 
				
			||||||
 | 
						blobmsg_add_string(&b, "dst", server);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ubus_invoke_async(&conn.ctx, ucentral, "radius", b.head, &async);
 | 
				
			||||||
 | 
						ubus_abort_request(&conn.ctx, &async);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						free(data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int
 | 
				
			||||||
 | 
					radius_parse(char *buf, int len, int port, enum socket_type type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct radius_header *hdr = (struct radius_header *) buf;
 | 
				
			||||||
 | 
						struct radius_tlv *station_id = NULL;
 | 
				
			||||||
 | 
						char station_id_str[256] = {};
 | 
				
			||||||
 | 
						char server_ip_str[256] = {};
 | 
				
			||||||
 | 
						void *avp = hdr->avp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						hdr->len = ntohs(hdr->len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (hdr->len != len) {
 | 
				
			||||||
 | 
							printf("invalid header length\n");
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("\tcode:%d, id:%d, len:%d\n", hdr->code, hdr->id, hdr->len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						len -= sizeof(*hdr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (len > 0) {
 | 
				
			||||||
 | 
							struct radius_tlv *tlv = (struct radius_tlv *)avp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (len < tlv->len) {
 | 
				
			||||||
 | 
								printf("invalid TLV length\n");
 | 
				
			||||||
 | 
								return -1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (tlv->id == TLV_STATION_ID)
 | 
				
			||||||
 | 
								station_id = tlv;
 | 
				
			||||||
 | 
							if (tlv->id == TLV_VENDOR && ntohl(*(uint32_t *) tlv->data) == TIP_VENDOR) {
 | 
				
			||||||
 | 
								struct radius_tlv *vendor = (struct radius_tlv *) &tlv->data[6];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (vendor->id == TLV_TIP_SERVER_V4)
 | 
				
			||||||
 | 
									strncpy(server_ip_str, vendor->data, vendor->len - 2);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printf("\tID:%d, len:%d\n", tlv->id, tlv->len);
 | 
				
			||||||
 | 
							avp += tlv->len;
 | 
				
			||||||
 | 
							len -= tlv->len;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!station_id) {
 | 
				
			||||||
 | 
							printf("no station ID found\n");
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (!*server_ip_str) {
 | 
				
			||||||
 | 
							printf("no server ip found\n");
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						memcpy(station_id_str, station_id->data, station_id->len - 2);
 | 
				
			||||||
 | 
						printf("\tcalling station id:%s, server ip:%s\n", station_id_str, server_ip_str);
 | 
				
			||||||
 | 
						radius_station_add(station_id_str, port, type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						radius_forward(buf, server_ip_str, type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					sock_recv(struct uloop_fd *u, unsigned int events)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						static char buf[RAD_PROX_BUFLEN];
 | 
				
			||||||
 | 
						static char cmsg_buf[( CMSG_SPACE(sizeof(struct in_pktinfo)) + sizeof(int)) + 1];
 | 
				
			||||||
 | 
						static struct sockaddr_in sin;
 | 
				
			||||||
 | 
						char addr_str[INET_ADDRSTRLEN];
 | 
				
			||||||
 | 
						static struct iovec iov = {
 | 
				
			||||||
 | 
							.iov_base = buf,
 | 
				
			||||||
 | 
							.iov_len = sizeof(buf)
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						static struct msghdr msg = {
 | 
				
			||||||
 | 
							.msg_name = &sin,
 | 
				
			||||||
 | 
							.msg_namelen = sizeof(sin),
 | 
				
			||||||
 | 
							.msg_iov = &iov,
 | 
				
			||||||
 | 
							.msg_iovlen = 1,
 | 
				
			||||||
 | 
							.msg_control = cmsg_buf,
 | 
				
			||||||
 | 
							.msg_controllen = sizeof(cmsg_buf),
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						struct cmsghdr *cmsg;
 | 
				
			||||||
 | 
						struct radius_socket *sock = container_of(u, struct radius_socket, fd);
 | 
				
			||||||
 | 
						int len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							struct in_pktinfo *pkti = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							len = recvmsg(u->fd, &msg, 0);
 | 
				
			||||||
 | 
							if (len < 0) {
 | 
				
			||||||
 | 
								switch (errno) {
 | 
				
			||||||
 | 
								case EAGAIN:
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								case EINTR:
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									perror("recvmsg");
 | 
				
			||||||
 | 
									uloop_fd_delete(u);
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
 | 
				
			||||||
 | 
								if (cmsg->cmsg_type != IP_PKTINFO)
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								pkti = (struct in_pktinfo *) CMSG_DATA(cmsg);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!pkti) {
 | 
				
			||||||
 | 
								printf("Received packet without ifindex\n");
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							inet_ntop(AF_INET, &sin.sin_addr, addr_str, sizeof(addr_str));
 | 
				
			||||||
 | 
							printf("RX: src:%s:%d, len=%d\n", addr_str, sin.sin_port, len);
 | 
				
			||||||
 | 
							radius_parse(buf, len, sin.sin_port, sock->type);
 | 
				
			||||||
 | 
						} while (1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct radius_socket *
 | 
				
			||||||
 | 
					sock_open(char *port, enum socket_type type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct radius_socket *sock = malloc(sizeof(*sock));
 | 
				
			||||||
 | 
						int yes = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!sock)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						memset(sock, 0, sizeof(*sock));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sock->fd.fd = usock(USOCK_UDP | USOCK_SERVER | USOCK_NONBLOCK |
 | 
				
			||||||
 | 
								    USOCK_NUMERIC | USOCK_IPV4ONLY,
 | 
				
			||||||
 | 
								    "127.0.0.1", port);
 | 
				
			||||||
 | 
						if (sock->fd.fd < 0) {
 | 
				
			||||||
 | 
					                perror("usock");
 | 
				
			||||||
 | 
							free(sock);
 | 
				
			||||||
 | 
					                return NULL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (setsockopt(sock->fd.fd, IPPROTO_IP, IP_PKTINFO, &yes, sizeof(yes)) < 0)
 | 
				
			||||||
 | 
							perror("setsockopt(IP_PKTINFO)");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sock->type = type;
 | 
				
			||||||
 | 
						sock->fd.cb = sock_recv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						uloop_fd_add(&sock->fd, ULOOP_READ);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sock;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					ubus_event_handler_cb(struct ubus_context *ctx,  struct ubus_event_handler *ev,
 | 
				
			||||||
 | 
							      const char *type, struct blob_attr *msg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						enum {
 | 
				
			||||||
 | 
							EVENT_ID,
 | 
				
			||||||
 | 
							EVENT_PATH,
 | 
				
			||||||
 | 
							__EVENT_MAX
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static const struct blobmsg_policy status_policy[__EVENT_MAX] = {
 | 
				
			||||||
 | 
							[EVENT_ID] = { .name = "id", .type = BLOBMSG_TYPE_INT32 },
 | 
				
			||||||
 | 
							[EVENT_PATH] = { .name = "path", .type = BLOBMSG_TYPE_STRING },
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct blob_attr *tb[__EVENT_MAX];
 | 
				
			||||||
 | 
						char *path;
 | 
				
			||||||
 | 
						uint32_t id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						blobmsg_parse(status_policy, __EVENT_MAX, tb, blob_data(msg), blob_len(msg));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!tb[EVENT_ID] || !tb[EVENT_PATH])
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						path = blobmsg_get_string(tb[EVENT_PATH]);
 | 
				
			||||||
 | 
						id = blobmsg_get_u32(tb[EVENT_ID]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (strcmp(path, "ucentral"))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						if (!strcmp("ubus.object.remove", type))
 | 
				
			||||||
 | 
							ucentral = 0;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							ucentral = id;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct ubus_event_handler ubus_event_handler = { .cb = ubus_event_handler_cb };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					ubus_connect_handler(struct ubus_context *ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ubus_register_event_handler(ctx, &ubus_event_handler, "ubus.object.add");
 | 
				
			||||||
 | 
						ubus_register_event_handler(ctx, &ubus_event_handler, "ubus.object.remove");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ubus_lookup_id(ctx, "ucentral", &ucentral);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char **argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						uloop_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						conn.cb = ubus_connect_handler;
 | 
				
			||||||
 | 
						ubus_auto_connect(&conn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sock_open("1812", RADIUS_AUTH);
 | 
				
			||||||
 | 
						sock_open("1813", RADIUS_ACCT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						uloop_run();
 | 
				
			||||||
 | 
						uloop_end();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -101,6 +101,7 @@ deliface() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
found=0
 | 
					found=0
 | 
				
			||||||
find_ssid() {
 | 
					find_ssid() {
 | 
				
			||||||
 | 
						local ssid
 | 
				
			||||||
	config_get ssid $1 ssid
 | 
						config_get ssid $1 ssid
 | 
				
			||||||
	[ "$ssid" == "$2" ] || return
 | 
						[ "$ssid" == "$2" ] || return
 | 
				
			||||||
	found=1
 | 
						found=1
 | 
				
			||||||
@@ -119,7 +120,7 @@ addiface() {
 | 
				
			|||||||
	echo -n startup > /tmp/ratelimit.$iface
 | 
						echo -n startup > /tmp/ratelimit.$iface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sleep 2
 | 
						sleep 2
 | 
				
			||||||
	ssid=$(ubus call network.wireless status | jsonfilter -e '@[*].interfaces[@.ifname="'"$iface"'"].config.ssid')
 | 
						ssid=$(ubus call hostapd.$iface get_status | jsonfilter -e '@.ssid')
 | 
				
			||||||
	[ -z "$ssid" ] && {
 | 
						[ -z "$ssid" ] && {
 | 
				
			||||||
		rm /tmp/ratelimit.$iface
 | 
							rm /tmp/ratelimit.$iface
 | 
				
			||||||
		logger "ratelimit: failed to lookup ssid"
 | 
							logger "ratelimit: failed to lookup ssid"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,11 +3,11 @@ include $(TOPDIR)/rules.mk
 | 
				
			|||||||
PKG_NAME:=ucentral-client
 | 
					PKG_NAME:=ucentral-client
 | 
				
			||||||
PKG_RELEASE:=1
 | 
					PKG_RELEASE:=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-client.git
 | 
					PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git
 | 
				
			||||||
PKG_MIRROR_HASH:=37a1b7393cf5d15dbcd4840d9ffb2b16bf5b43cdd5c0da955c744bfc10211cbc
 | 
					PKG_MIRROR_HASH:=afcdce6a4ea24405b98147bac342a24c21ad6ba91e57a2a966018949ece9a294
 | 
				
			||||||
PKG_SOURCE_PROTO:=git
 | 
					PKG_SOURCE_PROTO:=git
 | 
				
			||||||
PKG_SOURCE_DATE:=2022-01-10
 | 
					PKG_SOURCE_DATE:=2022-05-29
 | 
				
			||||||
PKG_SOURCE_VERSION:=6cb4485ab49c5ab9244fb55af9fd0e1801f154f4
 | 
					PKG_SOURCE_VERSION:=a4671bbe7d30b1286b718e08573d73dae4df344a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_LICENSE:=BSD-3-Clause
 | 
					PKG_LICENSE:=BSD-3-Clause
 | 
				
			||||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
					PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
				
			||||||
@@ -19,7 +19,7 @@ define Package/ucentral-client
 | 
				
			|||||||
  SECTION:=ucentral
 | 
					  SECTION:=ucentral
 | 
				
			||||||
  CATEGORY:=uCentral
 | 
					  CATEGORY:=uCentral
 | 
				
			||||||
  TITLE:=OpenWrt uCentral websocket client
 | 
					  TITLE:=OpenWrt uCentral websocket client
 | 
				
			||||||
  DEPENDS:=+ucode +ucode-mod-fs +ucode-mod-ubus +ucode-mod-uci +ucode-mod-math +ucode-mod-resolv \
 | 
					  DEPENDS:=+ucode +ucode-mod-fs +ucode-mod-ubus +ucode-mod-uci +ucode-mod-math +ucode-mod-resolv +ucode-mod-uloop \
 | 
				
			||||||
	   +libubox +libwebsockets-openssl +libblobmsg-json +libubus
 | 
						   +libubox +libwebsockets-openssl +libblobmsg-json +libubus
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ start_service() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	mkdir -p /tmp/ucentral/
 | 
						mkdir -p /tmp/ucentral/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ucode -m fs -i /usr/share/ucentral/crashlog.uc
 | 
						ucode -l fs /usr/share/ucentral/crashlog.uc
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	. /lib/functions.sh
 | 
						. /lib/functions.sh
 | 
				
			||||||
	cp /etc/config-shadow/ucentral /etc/config/
 | 
						cp /etc/config-shadow/ucentral /etc/config/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,11 +3,11 @@ include $(TOPDIR)/rules.mk
 | 
				
			|||||||
PKG_NAME:=ucentral-schema
 | 
					PKG_NAME:=ucentral-schema
 | 
				
			||||||
PKG_RELEASE:=1
 | 
					PKG_RELEASE:=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git
 | 
					PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git
 | 
				
			||||||
PKG_MIRROR_HASH:=af89f22de096e860cfe5295837507d288d7c919d1cb61d7deca012895ed80321
 | 
					PKG_MIRROR_HASH:=3ba2d66f8e52c784f136bf340ab2fb81568a1d8df8dbebfa487fc57652bea04f
 | 
				
			||||||
PKG_SOURCE_PROTO:=git
 | 
					PKG_SOURCE_PROTO:=git
 | 
				
			||||||
PKG_SOURCE_DATE:=2022-01-17
 | 
					PKG_SOURCE_DATE:=2022-05-29
 | 
				
			||||||
PKG_SOURCE_VERSION:=7015febc04ad70a956b1ad79f2911bbdc24458a5
 | 
					PKG_SOURCE_VERSION:=96324e2f7443cb3ae70f8fca10f37548f673e3f8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
					PKG_MAINTAINER:=John Crispin <john@phrozen.org>
 | 
				
			||||||
PKG_LICENSE:=BSD-3-Clause
 | 
					PKG_LICENSE:=BSD-3-Clause
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ PROG=/usr/bin/ucode
 | 
				
			|||||||
start_service() {
 | 
					start_service() {
 | 
				
			||||||
	local interval=$(uci get onlinecheck.@config[-1].check_interval)
 | 
						local interval=$(uci get onlinecheck.@config[-1].check_interval)
 | 
				
			||||||
	procd_open_instance
 | 
						procd_open_instance
 | 
				
			||||||
	procd_set_param command "$PROG" -m uci -m fs -i /usr/share/ucentral/onlinecheck.uc
 | 
						procd_set_param command "$PROG" -l uci -l fs /usr/share/ucentral/onlinecheck.uc
 | 
				
			||||||
	procd_set_param respawn 1 $interval 0
 | 
						procd_set_param respawn 1 $interval 0
 | 
				
			||||||
	procd_close_instance
 | 
						procd_close_instance
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						"uuid": 2,
 | 
				
			||||||
 | 
						"radios": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"band": "2G",
 | 
				
			||||||
 | 
								"country": "CA",
 | 
				
			||||||
 | 
								"channel-mode": "HE",
 | 
				
			||||||
 | 
								"channel-width": 20,
 | 
				
			||||||
 | 
								"channel": 6
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"interfaces": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"name": "WAN",
 | 
				
			||||||
 | 
								"role": "upstream",
 | 
				
			||||||
 | 
								"services": [ "ssh" ],
 | 
				
			||||||
 | 
								"ethernet": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"select-ports": [
 | 
				
			||||||
 | 
											"WAN*"
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								"ipv4": {
 | 
				
			||||||
 | 
									"addressing": "dynamic"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"ssids": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"name": "OpenWifi",
 | 
				
			||||||
 | 
										"wifi-bands": [
 | 
				
			||||||
 | 
											"2G"
 | 
				
			||||||
 | 
										],
 | 
				
			||||||
 | 
										"bss-mode": "ap",
 | 
				
			||||||
 | 
										"encryption": {
 | 
				
			||||||
 | 
											"proto": "psk2-radius",
 | 
				
			||||||
 | 
											"ieee80211w": "optional"
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"radius": {
 | 
				
			||||||
 | 
											"authentication": {
 | 
				
			||||||
 | 
												"host": "192.168.50.30",
 | 
				
			||||||
 | 
												"port": 1812,
 | 
				
			||||||
 | 
												"secret": "secret"
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"accounting": {
 | 
				
			||||||
 | 
												"host": "192.168.50.30",
 | 
				
			||||||
 | 
												"port": 1813,
 | 
				
			||||||
 | 
												"secret": "secret"
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"name": "LAN",
 | 
				
			||||||
 | 
								"role": "downstream",
 | 
				
			||||||
 | 
								"services": [ "ssh" ],
 | 
				
			||||||
 | 
								"ethernet": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"select-ports": [
 | 
				
			||||||
 | 
											"LAN*"
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								"ipv4": {
 | 
				
			||||||
 | 
									"addressing": "static",
 | 
				
			||||||
 | 
									"subnet": "192.168.1.1/24",
 | 
				
			||||||
 | 
									"dhcp": {
 | 
				
			||||||
 | 
										"lease-first": 10,
 | 
				
			||||||
 | 
										"lease-count": 100,
 | 
				
			||||||
 | 
										"lease-time": "6h"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
						"metrics": {
 | 
				
			||||||
 | 
							"statistics": {
 | 
				
			||||||
 | 
								"interval": 120,
 | 
				
			||||||
 | 
								"types": [ "ssids", "lldp", "clients" ]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"health": {
 | 
				
			||||||
 | 
								"interval": 120
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"services": {
 | 
				
			||||||
 | 
							"ssh": {
 | 
				
			||||||
 | 
								"port": 22
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						"uuid": 2,
 | 
				
			||||||
 | 
						"radios": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"band": "5G",
 | 
				
			||||||
 | 
								"country": "CA",
 | 
				
			||||||
 | 
								"channel-mode": "HE",
 | 
				
			||||||
 | 
								"channel-width": 80,
 | 
				
			||||||
 | 
								"channel": 36
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"interfaces": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"name": "WAN",
 | 
				
			||||||
 | 
								"role": "upstream",
 | 
				
			||||||
 | 
								"ethernet": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"select-ports": [
 | 
				
			||||||
 | 
											"WAN*"
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								"ipv4": {
 | 
				
			||||||
 | 
									"addressing": "dynamic"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"ssids": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"name": "OpenWifi",
 | 
				
			||||||
 | 
										"wifi-bands": [
 | 
				
			||||||
 | 
											"2G", "5G"
 | 
				
			||||||
 | 
										],
 | 
				
			||||||
 | 
										"bss-mode": "ap",
 | 
				
			||||||
 | 
										"encryption": {
 | 
				
			||||||
 | 
											"proto": "wpa2",
 | 
				
			||||||
 | 
											"ieee80211w": "optional"
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"radius": {
 | 
				
			||||||
 | 
											"authentication": {
 | 
				
			||||||
 | 
												"host": "192.168.178.192",
 | 
				
			||||||
 | 
												"port": 1812,
 | 
				
			||||||
 | 
												"secret": "secret"
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"accounting": {
 | 
				
			||||||
 | 
												"host": "192.168.178.192",
 | 
				
			||||||
 | 
												"port": 1813,
 | 
				
			||||||
 | 
												"secret": "secret"
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"services": [ "radius-gw-proxy" ]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"name": "LAN",
 | 
				
			||||||
 | 
								"role": "downstream",
 | 
				
			||||||
 | 
								"services": [ "ssh" ],
 | 
				
			||||||
 | 
								"ethernet": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"select-ports": [
 | 
				
			||||||
 | 
											"LAN*"
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								"ipv4": {
 | 
				
			||||||
 | 
									"addressing": "static",
 | 
				
			||||||
 | 
									"subnet": "192.168.1.1/24",
 | 
				
			||||||
 | 
									"dhcp": {
 | 
				
			||||||
 | 
										"lease-first": 10,
 | 
				
			||||||
 | 
										"lease-count": 100,
 | 
				
			||||||
 | 
										"lease-time": "6h"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
						"metrics": {
 | 
				
			||||||
 | 
							"statistics": {
 | 
				
			||||||
 | 
								"interval": 120,
 | 
				
			||||||
 | 
								"types": [ "ssids", "lldp", "clients" ]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"health": {
 | 
				
			||||||
 | 
								"interval": 120
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"services": {
 | 
				
			||||||
 | 
							"ssh": {
 | 
				
			||||||
 | 
								"port": 22
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -103,14 +103,29 @@
 | 
				
			|||||||
		"radius-proxy": {
 | 
							"radius-proxy": {
 | 
				
			||||||
			"realms": [
 | 
								"realms": [
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					"realm": "test",
 | 
										"protocol": "radsec",
 | 
				
			||||||
 | 
										"realm": [ "radsec1", "radsec2" ],
 | 
				
			||||||
					"host": "192.168.1.10",
 | 
										"host": "192.168.1.10",
 | 
				
			||||||
					"secret": "secret",
 | 
										"secret": "secret",
 | 
				
			||||||
					"ca-certificate": "Zm9vbwo=",
 | 
										"ca-certificate": "Zm9vbwo=",
 | 
				
			||||||
					"certificate": "Zm9vbwo=",
 | 
										"certificate": "Zm9vbwo=",
 | 
				
			||||||
					"private-key": "Zm9vbwo="
 | 
										"private-key": "Zm9vbwo="
 | 
				
			||||||
				}, {
 | 
									}, {
 | 
				
			||||||
					"realm": "*",
 | 
										"protocol": "radius",
 | 
				
			||||||
 | 
										"realm": [ "radius1", "radius2" ],
 | 
				
			||||||
 | 
										"auth-server": "192.168.1.11",
 | 
				
			||||||
 | 
										"auth-port": 1812,
 | 
				
			||||||
 | 
										"auth-secret": "secret",
 | 
				
			||||||
 | 
										"acct-server": "192.168.1.11",
 | 
				
			||||||
 | 
										"acct-port": 1813,
 | 
				
			||||||
 | 
										"acct-secret": "secret"
 | 
				
			||||||
 | 
									}, {
 | 
				
			||||||
 | 
										"protocol": "block",
 | 
				
			||||||
 | 
										"realm": [ "block1", "block2" ],
 | 
				
			||||||
 | 
										"message": "Access Denied"
 | 
				
			||||||
 | 
									}, {
 | 
				
			||||||
 | 
										"protocol": "radsec",
 | 
				
			||||||
 | 
										"realm": [ "*" ],
 | 
				
			||||||
					"auto-discover": true,
 | 
										"auto-discover": true,
 | 
				
			||||||
					"use-local-certificates": true
 | 
										"use-local-certificates": true
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,123 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						"uuid": 2,
 | 
				
			||||||
 | 
						"radios": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"band": "2G",
 | 
				
			||||||
 | 
								"country": "US",
 | 
				
			||||||
 | 
								"channel-mode": "HE",
 | 
				
			||||||
 | 
								"channel-width": 20,
 | 
				
			||||||
 | 
								"channel": "auto"
 | 
				
			||||||
 | 
							}, {
 | 
				
			||||||
 | 
								"band": "5G",
 | 
				
			||||||
 | 
								"country": "US",
 | 
				
			||||||
 | 
								"channel-mode": "HE",
 | 
				
			||||||
 | 
								"channel-width": 80,
 | 
				
			||||||
 | 
								"channel": 36
 | 
				
			||||||
 | 
							}, {
 | 
				
			||||||
 | 
								"band": "6G",
 | 
				
			||||||
 | 
								"country": "US",
 | 
				
			||||||
 | 
								"channel-mode": "HE",
 | 
				
			||||||
 | 
								"channel-width": 80,
 | 
				
			||||||
 | 
								"channel": 33
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"interfaces": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"name": "WAN",
 | 
				
			||||||
 | 
								"role": "upstream",
 | 
				
			||||||
 | 
								"services": [ "lldp" ],
 | 
				
			||||||
 | 
								"ethernet": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"select-ports": [
 | 
				
			||||||
 | 
											"WAN*"
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								"ipv4": {
 | 
				
			||||||
 | 
									"addressing": "dynamic"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"ssids": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"name": "OpenWifi2",
 | 
				
			||||||
 | 
										"wifi-bands": [
 | 
				
			||||||
 | 
											"2G"
 | 
				
			||||||
 | 
										],
 | 
				
			||||||
 | 
										"bss-mode": "ap",
 | 
				
			||||||
 | 
										"encryption": {
 | 
				
			||||||
 | 
											"proto": "psk2",
 | 
				
			||||||
 | 
											"key": "OpenWifi",
 | 
				
			||||||
 | 
											"ieee80211w": "optional"
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"rrm": {
 | 
				
			||||||
 | 
											"reduced-neighbor-reporting": true
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}, {
 | 
				
			||||||
 | 
										"name": "OpenWifi5",
 | 
				
			||||||
 | 
										"wifi-bands": [
 | 
				
			||||||
 | 
											"5G"
 | 
				
			||||||
 | 
										],
 | 
				
			||||||
 | 
										"bss-mode": "ap",
 | 
				
			||||||
 | 
										"encryption": {
 | 
				
			||||||
 | 
											"proto": "psk2",
 | 
				
			||||||
 | 
											"key": "OpenWifi",
 | 
				
			||||||
 | 
											"ieee80211w": "optional"
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"rrm": {
 | 
				
			||||||
 | 
											"reduced-neighbor-reporting": true
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}, {
 | 
				
			||||||
 | 
										"name": "OpenWifi6",
 | 
				
			||||||
 | 
										"wifi-bands": [
 | 
				
			||||||
 | 
											"6G"
 | 
				
			||||||
 | 
										],
 | 
				
			||||||
 | 
										"bss-mode": "ap",
 | 
				
			||||||
 | 
										"encryption": {
 | 
				
			||||||
 | 
											"proto": "sae",
 | 
				
			||||||
 | 
											"key": "OpenWifi",
 | 
				
			||||||
 | 
											"ieee80211w": "required"
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"name": "LAN",
 | 
				
			||||||
 | 
								"role": "downstream",
 | 
				
			||||||
 | 
								"services": [ "ssh", "lldp" ],
 | 
				
			||||||
 | 
								"ethernet": [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										"select-ports": [
 | 
				
			||||||
 | 
											"LAN*"
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								"ipv4": {
 | 
				
			||||||
 | 
									"addressing": "static",
 | 
				
			||||||
 | 
									"subnet": "192.168.1.1/24",
 | 
				
			||||||
 | 
									"dhcp": {
 | 
				
			||||||
 | 
										"lease-first": 10,
 | 
				
			||||||
 | 
										"lease-count": 100,
 | 
				
			||||||
 | 
										"lease-time": "6h"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						],
 | 
				
			||||||
 | 
						"metrics": {
 | 
				
			||||||
 | 
							"statistics": {
 | 
				
			||||||
 | 
								"interval": 120,
 | 
				
			||||||
 | 
								"types": [ "ssids", "lldp", "clients" ]
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"health": {
 | 
				
			||||||
 | 
								"interval": 120
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"services": {
 | 
				
			||||||
 | 
							"lldp": {
 | 
				
			||||||
 | 
								"describe": "uCentral",
 | 
				
			||||||
 | 
								"location": "universe"
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							"ssh": {
 | 
				
			||||||
 | 
								"port": 22
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!/usr/bin/ucode -R
 | 
					#!/usr/bin/ucode 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let nl = require("nl80211");
 | 
					let nl = require("nl80211");
 | 
				
			||||||
let def = nl.const;
 | 
					let def = nl.const;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1 @@
 | 
				
			|||||||
[ ifup = "$ACTION" ] && {
 | 
					[ ifup = "$ACTION" ] && /usr/share/ucentral/ip-collide.uc
 | 
				
			||||||
	ip-collide
 | 
					 | 
				
			||||||
	[ $? -eq 0 ] || ubus call ucentral send '{"msg": "ip/domain collision detected", "severity": 3}'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,13 +12,13 @@ PKG_RELEASE:=1
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
PKG_SOURCE_PROTO:=git
 | 
					PKG_SOURCE_PROTO:=git
 | 
				
			||||||
PKG_SOURCE_URL=https://github.com/jow-/ucode.git
 | 
					PKG_SOURCE_URL=https://github.com/jow-/ucode.git
 | 
				
			||||||
PKG_MIRROR_HASH:=376b89c35967d3761acb192af9fb6b7b20dbcc50d03c8ed851751d2376bf26b4
 | 
					PKG_SOURCE_DATE:=2022-04-07
 | 
				
			||||||
PKG_SOURCE_DATE:=2021-07-30
 | 
					PKG_SOURCE_VERSION:=33f1e0b0926e973fb5ae445e9a995848762143bb
 | 
				
			||||||
PKG_SOURCE_VERSION:=8fd4746da31b945a6259ac846f7cf8dcfef0b1ef
 | 
					PKG_MIRROR_HASH:=e419678244c5402c739e3a200d6d1d7cd6989a711c73744bc68b2d5b76bae33a
 | 
				
			||||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
 | 
					PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
 | 
				
			||||||
PKG_LICENSE:=ISC
 | 
					PKG_LICENSE:=ISC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_ABI_VERSION:=20210730
 | 
					PKG_ABI_VERSION:=20220322
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(INCLUDE_DIR)/package.mk
 | 
					include $(INCLUDE_DIR)/package.mk
 | 
				
			||||||
include $(INCLUDE_DIR)/cmake.mk
 | 
					include $(INCLUDE_DIR)/cmake.mk
 | 
				
			||||||
@@ -65,17 +65,6 @@ define Package/ucode-mod-fs/description
 | 
				
			|||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-resolv
 | 
					 | 
				
			||||||
  $(Package/ucode/default)
 | 
					 | 
				
			||||||
  TITLE+= (resolv module)
 | 
					 | 
				
			||||||
  DEPENDS:=ucode
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-resolv/description
 | 
					 | 
				
			||||||
 The resolv plugin module allows making DNS resolves.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-math
 | 
					define Package/ucode-mod-math
 | 
				
			||||||
  $(Package/ucode/default)
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
  TITLE+= (math module)
 | 
					  TITLE+= (math module)
 | 
				
			||||||
@@ -87,6 +76,50 @@ define Package/ucode-mod-math/description
 | 
				
			|||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-nl80211
 | 
				
			||||||
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
 | 
					  TITLE+= (nl80211 module)
 | 
				
			||||||
 | 
					  DEPENDS:=ucode +libnl-tiny +kmod-mac80211
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-nl80211/description
 | 
				
			||||||
 | 
					 The nl80211 plugin provides access to the Linux wireless 802.11 netlink API.
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-resolv
 | 
				
			||||||
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
 | 
					  TITLE+= (resolv module)
 | 
				
			||||||
 | 
					  DEPENDS:=ucode
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-resolv/description
 | 
				
			||||||
 | 
					 The resolv plugin implements simple DNS resolving.
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-rtnl
 | 
				
			||||||
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
 | 
					  TITLE+= (rtnl module)
 | 
				
			||||||
 | 
					  DEPENDS:=ucode +libnl-tiny
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-rtnl/description
 | 
				
			||||||
 | 
					 The rtnl plugin provides access to the Linux routing netlink API.
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-struct
 | 
				
			||||||
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
 | 
					  TITLE+= (struct module)
 | 
				
			||||||
 | 
					  DEPENDS:=ucode
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-struct/description
 | 
				
			||||||
 | 
					 The struct plugin implemnts Python 3 compatible struct.pack/unpack functionality.
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-ubus
 | 
					define Package/ucode-mod-ubus
 | 
				
			||||||
  $(Package/ucode/default)
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
  TITLE+= (ubus module)
 | 
					  TITLE+= (ubus module)
 | 
				
			||||||
@@ -109,40 +142,16 @@ define Package/ucode-mod-uci/description
 | 
				
			|||||||
 The uci module allows templates to read and modify uci configuration.
 | 
					 The uci module allows templates to read and modify uci configuration.
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-uloop
 | 
				
			||||||
define Package/ucode-mod-nl80211
 | 
					 | 
				
			||||||
  $(Package/ucode/default)
 | 
					  $(Package/ucode/default)
 | 
				
			||||||
  TITLE+= (nl80211 module)
 | 
					  TITLE+= (uloop module)
 | 
				
			||||||
  DEPENDS:=ucode +libnl-tiny +kmod-mac80211
 | 
					  DEPENDS:=ucode +libubox
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-nl80211/description
 | 
					define Package/ucode-mod-uloop/description
 | 
				
			||||||
 The nl80211 module allows templates to send and receive nl80211 messages..
 | 
					 The uloop module allows templates to run a main loop.
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-struct
 | 
					 | 
				
			||||||
  $(Package/ucode/default)
 | 
					 | 
				
			||||||
  TITLE+= (struct module)
 | 
					 | 
				
			||||||
  DEPENDS:=ucode
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-struct/description
 | 
					 | 
				
			||||||
 The struct module allows templates to unpack binary buffers.
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-rtnl
 | 
					 | 
				
			||||||
  $(Package/ucode/default)
 | 
					 | 
				
			||||||
  TITLE+= (rtnl module)
 | 
					 | 
				
			||||||
  DEPENDS:=ucode +libnl-tiny
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-struct/description
 | 
					 | 
				
			||||||
 The rtnl module allows templates to send and receive rtnl messages..
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Build/Prepare
 | 
					define Build/Prepare
 | 
				
			||||||
	$(Build/Prepare/Default)
 | 
						$(Build/Prepare/Default)
 | 
				
			||||||
	$(CP) $(STAGING_DIR)/usr/include/mac80211/uapi/linux/nl80211.h $(PKG_BUILD_DIR)/nl80211_copy.h
 | 
						$(CP) $(STAGING_DIR)/usr/include/mac80211/uapi/linux/nl80211.h $(PKG_BUILD_DIR)/nl80211_copy.h
 | 
				
			||||||
@@ -157,7 +166,7 @@ endef
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define Package/ucode/install
 | 
					define Package/ucode/install
 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/bin
 | 
						$(INSTALL_DIR) $(1)/usr/bin
 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ucode $(1)/usr/bin/ucode
 | 
						$(CP) $(PKG_INSTALL_DIR)/usr/bin/u* $(1)/usr/bin/
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/libucode/install
 | 
					define Package/libucode/install
 | 
				
			||||||
@@ -170,14 +179,29 @@ define Package/ucode-mod-fs/install
 | 
				
			|||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/fs.so $(1)/usr/lib/ucode/
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/fs.so $(1)/usr/lib/ucode/
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-math/install
 | 
				
			||||||
 | 
						$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
				
			||||||
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/math.so $(1)/usr/lib/ucode/
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-nl80211/install
 | 
				
			||||||
 | 
						$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
				
			||||||
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/nl80211.so $(1)/usr/lib/ucode/
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-resolv/install
 | 
					define Package/ucode-mod-resolv/install
 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
						$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/resolv.so $(1)/usr/lib/ucode/
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/resolv.so $(1)/usr/lib/ucode/
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-math/install
 | 
					define Package/ucode-mod-rtnl/install
 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
						$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/math.so $(1)/usr/lib/ucode/
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/rtnl.so $(1)/usr/lib/ucode/
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/ucode-mod-struct/install
 | 
				
			||||||
 | 
						$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
				
			||||||
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/struct.so $(1)/usr/lib/ucode/
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-ubus/install
 | 
					define Package/ucode-mod-ubus/install
 | 
				
			||||||
@@ -190,29 +214,20 @@ define Package/ucode-mod-uci/install
 | 
				
			|||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uci.so $(1)/usr/lib/ucode/
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uci.so $(1)/usr/lib/ucode/
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/ucode-mod-nl80211/install
 | 
					define Package/ucode-mod-uloop/install
 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
						$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/nl80211.so $(1)/usr/lib/ucode/
 | 
						$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uloop.so $(1)/usr/lib/ucode/
 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-struct/install
 | 
					 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
					 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/struct.so $(1)/usr/lib/ucode/
 | 
					 | 
				
			||||||
endef
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define Package/ucode-mod-rtnl/install
 | 
					 | 
				
			||||||
	$(INSTALL_DIR) $(1)/usr/lib/ucode
 | 
					 | 
				
			||||||
	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/rtnl.so $(1)/usr/lib/ucode/
 | 
					 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(eval $(call BuildPackage,ucode))
 | 
					$(eval $(call BuildPackage,ucode))
 | 
				
			||||||
$(eval $(call BuildPackage,libucode))
 | 
					$(eval $(call BuildPackage,libucode))
 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-fs))
 | 
					$(eval $(call BuildPackage,ucode-mod-fs))
 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-resolv))
 | 
					 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-math))
 | 
					$(eval $(call BuildPackage,ucode-mod-math))
 | 
				
			||||||
 | 
					$(eval $(call BuildPackage,ucode-mod-nl80211))
 | 
				
			||||||
 | 
					$(eval $(call BuildPackage,ucode-mod-resolv))
 | 
				
			||||||
 | 
					$(eval $(call BuildPackage,ucode-mod-rtnl))
 | 
				
			||||||
 | 
					$(eval $(call BuildPackage,ucode-mod-struct))
 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-ubus))
 | 
					$(eval $(call BuildPackage,ucode-mod-ubus))
 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-uci))
 | 
					$(eval $(call BuildPackage,ucode-mod-uci))
 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-nl80211))
 | 
					$(eval $(call BuildPackage,ucode-mod-uloop))
 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-struct))
 | 
					 | 
				
			||||||
$(eval $(call BuildPackage,ucode-mod-rtnl))
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
Index: ucode-2021-07-30-03b6a8ef/lib/nl80211.c
 | 
					Index: ucode-2022-04-07-33f1e0b0/lib/nl80211.c
 | 
				
			||||||
===================================================================
 | 
					===================================================================
 | 
				
			||||||
--- ucode-2021-07-30-03b6a8ef.orig/lib/nl80211.c
 | 
					--- ucode-2022-04-07-33f1e0b0.orig/lib/nl80211.c
 | 
				
			||||||
+++ ucode-2021-07-30-03b6a8ef/lib/nl80211.c
 | 
					+++ ucode-2022-04-07-33f1e0b0/lib/nl80211.c
 | 
				
			||||||
@@ -38,7 +38,7 @@ limitations under the License.
 | 
					@@ -38,7 +38,7 @@ limitations under the License.
 | 
				
			||||||
 #include <netlink/genl/family.h>
 | 
					 #include <netlink/genl/family.h>
 | 
				
			||||||
 #include <netlink/genl/ctrl.h>
 | 
					 #include <netlink/genl/ctrl.h>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,20 +8,20 @@ Subject: [PATCH] fixes
 | 
				
			|||||||
 lib/rtnl.c    |  1 +
 | 
					 lib/rtnl.c    |  1 +
 | 
				
			||||||
 2 files changed, 87 insertions(+), 6 deletions(-)
 | 
					 2 files changed, 87 insertions(+), 6 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/lib/nl80211.c b/lib/nl80211.c
 | 
					Index: ucode-2022-04-07-33f1e0b0/lib/nl80211.c
 | 
				
			||||||
index fc24fb8..3e21141 100644
 | 
					===================================================================
 | 
				
			||||||
--- a/lib/nl80211.c
 | 
					--- ucode-2022-04-07-33f1e0b0.orig/lib/nl80211.c
 | 
				
			||||||
+++ b/lib/nl80211.c
 | 
					+++ ucode-2022-04-07-33f1e0b0/lib/nl80211.c
 | 
				
			||||||
@@ -45,6 +45,8 @@ limitations under the License.
 | 
					@@ -51,6 +51,8 @@ limitations under the License.
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 #define err_return(code, ...) do { set_error(code, __VA_ARGS__); return NULL; } while(0)
 | 
					 #define NL80211_ATTR_NOT_IMPLEMENTED 0x10000
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
+#define NL80211_ATTR_NOT_IMPLEMENTED 0x10000
 | 
					+#define NL80211_ATTR_NOT_IMPLEMENTED 0x10000
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
 static struct {
 | 
					 static struct {
 | 
				
			||||||
 	int code;
 | 
					 	int code;
 | 
				
			||||||
 	char *msg;
 | 
					 	char *msg;
 | 
				
			||||||
@@ -257,6 +259,14 @@ static const uc_nl_nested_spec_t nl80211_keys_nla = {
 | 
					@@ -263,6 +265,14 @@ static const uc_nl_nested_spec_t nl80211
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -36,7 +36,7 @@ index fc24fb8..3e21141 100644
 | 
				
			|||||||
 static const uc_nl_nested_spec_t nl80211_mesh_params_nla = {
 | 
					 static const uc_nl_nested_spec_t nl80211_mesh_params_nla = {
 | 
				
			||||||
 	.headsize = 0,
 | 
					 	.headsize = 0,
 | 
				
			||||||
 	.nattrs = 29,
 | 
					 	.nattrs = 29,
 | 
				
			||||||
@@ -348,6 +358,14 @@ static const uc_nl_nested_spec_t nl80211_nan_func_nla = {
 | 
					@@ -354,6 +364,14 @@ static const uc_nl_nested_spec_t nl80211
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -51,7 +51,7 @@ index fc24fb8..3e21141 100644
 | 
				
			|||||||
 static const uc_nl_nested_spec_t nl80211_peer_measurements_peers_req_data_ftm_nla = {
 | 
					 static const uc_nl_nested_spec_t nl80211_peer_measurements_peers_req_data_ftm_nla = {
 | 
				
			||||||
 	.headsize = 0,
 | 
					 	.headsize = 0,
 | 
				
			||||||
 	.nattrs = 13,
 | 
					 	.nattrs = 13,
 | 
				
			||||||
@@ -497,6 +515,26 @@ static const uc_nl_nested_spec_t nl80211_wiphy_bands_freqs_wmm_nla = {
 | 
					@@ -503,6 +521,26 @@ static const uc_nl_nested_spec_t nl80211
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -78,7 +78,7 @@ index fc24fb8..3e21141 100644
 | 
				
			|||||||
 static const uc_nl_nested_spec_t nl80211_wiphy_bands_freqs_nla = {
 | 
					 static const uc_nl_nested_spec_t nl80211_wiphy_bands_freqs_nla = {
 | 
				
			||||||
 	.headsize = 0,
 | 
					 	.headsize = 0,
 | 
				
			||||||
 	.nattrs = 25,
 | 
					 	.nattrs = 25,
 | 
				
			||||||
@@ -538,6 +576,10 @@ static const uc_nl_nested_spec_t nl80211_wiphy_bands_rates_nla = {
 | 
					@@ -544,6 +582,10 @@ static const uc_nl_nested_spec_t nl80211
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -89,35 +89,7 @@ index fc24fb8..3e21141 100644
 | 
				
			|||||||
 static const uc_nl_nested_spec_t nl80211_wiphy_bands_iftype_data_nla = {
 | 
					 static const uc_nl_nested_spec_t nl80211_wiphy_bands_iftype_data_nla = {
 | 
				
			||||||
 	.headsize = 0,
 | 
					 	.headsize = 0,
 | 
				
			||||||
 	.nattrs = 7,
 | 
					 	.nattrs = 7,
 | 
				
			||||||
@@ -645,13 +687,26 @@ static const uc_nl_nested_spec_t nl80211_bss_nla = {
 | 
					@@ -714,6 +756,10 @@ static const uc_nl_nested_spec_t nl80211
 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 static const uc_nl_nested_spec_t nl80211_sta_info_bitrate_nla = {
 | 
					 | 
				
			||||||
 	.headsize = 0,
 | 
					 | 
				
			||||||
-	.nattrs = 5,
 | 
					 | 
				
			||||||
+	.nattrs = 18,
 | 
					 | 
				
			||||||
 	.attrs = {
 | 
					 | 
				
			||||||
 		{ NL80211_RATE_INFO_BITRATE, "bitrate", DT_U16, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_RATE_INFO_BITRATE32, "bitrate32", DT_U32, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_RATE_INFO_MCS, "mcs", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_RATE_INFO_40_MHZ_WIDTH, "40_mhz_width", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_RATE_INFO_SHORT_GI, "short_gi", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_VHT_MCS, "vht_mcs", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_VHT_NSS, "vht_nss", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_HE_MCS, "he_mcs", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_HE_NSS, "he_nss", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_HE_GI, "he_gi", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_HE_DCM, "he_dcm", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_HE_RU_ALLOC, "he_ru_alloc", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_40_MHZ_WIDTH, "width_40", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_80_MHZ_WIDTH, "width_80", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_80P80_MHZ_WIDTH, "width_80p80", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_160_MHZ_WIDTH, "width_160", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_10_MHZ_WIDTH, "width_10", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_RATE_INFO_5_MHZ_WIDTH, "width_5", DT_FLAG, 0, NULL },
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
 };
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
@@ -695,9 +750,13 @@ static const uc_nl_nested_spec_t nl80211_bss_param_nla = {
 | 
					 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -127,77 +99,12 @@ index fc24fb8..3e21141 100644
 | 
				
			|||||||
+
 | 
					+
 | 
				
			||||||
 static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
 | 
					 static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
 | 
				
			||||||
 	.headsize = 0,
 | 
					 	.headsize = 0,
 | 
				
			||||||
-	.nattrs = 34,
 | 
					 	.nattrs = 35,
 | 
				
			||||||
+	.nattrs = 35,
 | 
					Index: ucode-2022-04-07-33f1e0b0/lib/rtnl.c
 | 
				
			||||||
 	.attrs = {
 | 
					===================================================================
 | 
				
			||||||
 		{ NL80211_STA_INFO_INACTIVE_TIME, "inactive_time", DT_U32, 0, NULL },
 | 
					--- ucode-2022-04-07-33f1e0b0.orig/lib/rtnl.c
 | 
				
			||||||
 		{ NL80211_STA_INFO_RX_BYTES, "rx_bytes", DT_U32, 0, NULL },
 | 
					+++ ucode-2022-04-07-33f1e0b0/lib/rtnl.c
 | 
				
			||||||
@@ -724,21 +783,37 @@ static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
 | 
					@@ -682,6 +682,7 @@ static const uc_nl_nested_spec_t link_ms
 | 
				
			||||||
 		{ NL80211_STA_INFO_NONPEER_PM, "nonpeer_pm", DT_U32, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_CHAIN_SIGNAL, "chain_signal", DT_S8, DF_MULTIPLE|DF_AUTOIDX, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_CHAIN_SIGNAL_AVG, "chain_signal_avg", DT_S8, DF_MULTIPLE|DF_AUTOIDX, NULL },
 | 
					 | 
				
			||||||
-		{ NL80211_STA_INFO_TID_STATS, "tid_stats", DT_NESTED, 0, &nl80211_tid_stats_nla },
 | 
					 | 
				
			||||||
+		{ NL80211_STA_INFO_TID_STATS, "tid_stats", DT_NESTED, DF_MULTIPLE|DF_AUTOIDX, &nl80211_tid_stats_nla },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_BSS_PARAM, "bss_param", DT_NESTED, 0, &nl80211_bss_param_nla },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_RX_DURATION, "rx_duration", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_TX_DURATION, "tx_duration", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
-		{ NL80211_STA_INFO_ACK_SIGNAL, "ack_signal", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
-		{ NL80211_STA_INFO_ACK_SIGNAL_AVG, "ack_signal_avg", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_STA_INFO_ACK_SIGNAL, "ack_signal", DT_S8, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_STA_INFO_ACK_SIGNAL_AVG, "ack_signal_avg", DT_S8, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_AIRTIME_LINK_METRIC, "airtime_link_metric", DT_U32, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_CONNECTED_TO_AS, "connected_to_as", DT_BOOL, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_STA_INFO_CONNECTED_TO_GATE, "connected_to_gate", DT_BOOL, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_STA_INFO_CONNECTED_TIME, "connected_time", DT_U32, 0, NULL },
 | 
					 | 
				
			||||||
+	}
 | 
					 | 
				
			||||||
+};
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+static const uc_nl_nested_spec_t nl80211_survey_info_nla = {
 | 
					 | 
				
			||||||
+	.headsize = 0,
 | 
					 | 
				
			||||||
+	.nattrs = 8,
 | 
					 | 
				
			||||||
+	.attrs = {
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_FREQUENCY, "frequency", DT_U32, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_TIME, "time", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_TIME_TX, "time_tx", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_TIME_RX, "time_rx", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_TIME_BUSY, "busy", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_TIME_EXT_BUSY, "ext_busy", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_TIME_SCAN, "scan", DT_U64, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_SURVEY_INFO_NOISE, "noise", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
 };
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 static const uc_nl_nested_spec_t nl80211_msg = {
 | 
					 | 
				
			||||||
 	.headsize = 0,
 | 
					 | 
				
			||||||
-	.nattrs = 124,
 | 
					 | 
				
			||||||
+	.nattrs = 126,
 | 
					 | 
				
			||||||
 	.attrs = {
 | 
					 | 
				
			||||||
 		{ NL80211_ATTR_4ADDR, "4addr", DT_U8, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_ATTR_AIRTIME_WEIGHT, "airtime_weight", DT_U16, 0, NULL },
 | 
					 | 
				
			||||||
@@ -864,6 +939,8 @@ static const uc_nl_nested_spec_t nl80211_msg = {
 | 
					 | 
				
			||||||
 		{ NL80211_ATTR_WPA_VERSIONS, "wpa_versions", DT_U32, 0, NULL },
 | 
					 | 
				
			||||||
 		{ NL80211_ATTR_SUPPORTED_IFTYPES, "supported_iftypes", DT_NESTED, 0, &nl80211_ifcomb_limit_types_nla },
 | 
					 | 
				
			||||||
 		{ NL80211_ATTR_SOFTWARE_IFTYPES, "software_iftypes", DT_NESTED, 0, &nl80211_ifcomb_limit_types_nla },
 | 
					 | 
				
			||||||
+		{ NL80211_ATTR_MAX_AP_ASSOC_STA, "max_ap_assoc", DT_U16, 0, NULL },
 | 
					 | 
				
			||||||
+		{ NL80211_ATTR_SURVEY_INFO, "survey_info", DT_NESTED, 0, &nl80211_survey_info_nla },
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
 };
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
@@ -1044,6 +1121,9 @@ uc_nl_parse_attrs(struct nl_msg *msg, char *base, const uc_nl_attr_spec_t *attrs
 | 
					 | 
				
			||||||
 	bool exists;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	for (i = 0; i < nattrs; i++) {
 | 
					 | 
				
			||||||
+		if (attrs[i].attr == NL80211_ATTR_NOT_IMPLEMENTED)
 | 
					 | 
				
			||||||
+			continue;
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
 		v = ucv_object_get(obj, attrs[i].key, &exists);
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 		if (!exists)
 | 
					 | 
				
			||||||
diff --git a/lib/rtnl.c b/lib/rtnl.c
 | 
					 | 
				
			||||||
index b6a3e38..c1d2088 100644
 | 
					 | 
				
			||||||
--- a/lib/rtnl.c
 | 
					 | 
				
			||||||
+++ b/lib/rtnl.c
 | 
					 | 
				
			||||||
@@ -682,6 +682,7 @@ static const uc_nl_nested_spec_t link_msg = {
 | 
					 | 
				
			||||||
 		{ IFLA_UNSPEC, "type", DT_U16, 0, MEMBER(ifinfomsg, ifi_type) },
 | 
					 		{ IFLA_UNSPEC, "type", DT_U16, 0, MEMBER(ifinfomsg, ifi_type) },
 | 
				
			||||||
 		{ IFLA_UNSPEC, "dev", DT_NETDEV, 0, MEMBER(ifinfomsg, ifi_index) },
 | 
					 		{ IFLA_UNSPEC, "dev", DT_NETDEV, 0, MEMBER(ifinfomsg, ifi_index) },
 | 
				
			||||||
 		{ IFLA_UNSPEC, "flags", DT_FLAGS, 0, MEMBER(ifinfomsg, ifi_flags) },
 | 
					 		{ IFLA_UNSPEC, "flags", DT_FLAGS, 0, MEMBER(ifinfomsg, ifi_flags) },
 | 
				
			||||||
@@ -205,6 +112,3 @@ index b6a3e38..c1d2088 100644
 | 
				
			|||||||
 		{ IFLA_ADDRESS, "address", DT_LLADDR, 0, NULL },
 | 
					 		{ IFLA_ADDRESS, "address", DT_LLADDR, 0, NULL },
 | 
				
			||||||
 		{ IFLA_BROADCAST, "broadcast", DT_LLADDR, 0, NULL },
 | 
					 		{ IFLA_BROADCAST, "broadcast", DT_LLADDR, 0, NULL },
 | 
				
			||||||
 		{ IFLA_TXQLEN, "txqlen", DT_U32, 0, NULL },
 | 
					 		{ IFLA_TXQLEN, "txqlen", DT_U32, 0, NULL },
 | 
				
			||||||
-- 
 | 
					 | 
				
			||||||
2.25.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										51
									
								
								feeds/ucentral/unetd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								feeds/ucentral/unetd/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright (C) 2022 OpenWrt.org
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This is free software, licensed under the GNU General Public License v2.
 | 
				
			||||||
 | 
					# See /LICENSE for more information.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(TOPDIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_NAME:=unetd
 | 
				
			||||||
 | 
					PKG_SOURCE_PROTO:=git
 | 
				
			||||||
 | 
					PKG_SOURCE_URL=https://github.com/nbd168/unetd
 | 
				
			||||||
 | 
					PKG_SOURCE_DATE:=2022-05-23
 | 
				
			||||||
 | 
					PKG_SOURCE_VERSION:=f75c2e70c0e494566dbbb20d408309412b4110e6
 | 
				
			||||||
 | 
					PKG_MIRROR_HASH:=633e6b0406b89850d0caf933fb419345be37d5deab812251d6183a7ab3f2cd42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_LICENSE:=GPL-2.0
 | 
				
			||||||
 | 
					PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_BUILD_PARALLEL:=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/package.mk
 | 
				
			||||||
 | 
					include $(INCLUDE_DIR)/cmake.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/unetd
 | 
				
			||||||
 | 
					  SECTION:=utils
 | 
				
			||||||
 | 
					  CATEGORY:=Base system
 | 
				
			||||||
 | 
					  TITLE:=Wireguard network configuration service
 | 
				
			||||||
 | 
					  DEPENDS:=+libubox +libubus +libblobmsg-json +libnl-tiny +TARGET_ipq807x:kmod-wireguard-backport +!TARGET_ipq807x:kmod-wireguard
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TARGET_CFLAGS += \
 | 
				
			||||||
 | 
						-I$(STAGING_DIR)/usr/include/libnl-tiny \
 | 
				
			||||||
 | 
						-I$(STAGING_DIR)/usr/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CMAKE_OPTIONS += \
 | 
				
			||||||
 | 
						-DLIBNL_LIBS=-lnl-tiny
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define Package/unetd/install
 | 
				
			||||||
 | 
						$(INSTALL_DIR) \
 | 
				
			||||||
 | 
							$(1)/etc/init.d \
 | 
				
			||||||
 | 
							$(1)/lib/netifd/proto \
 | 
				
			||||||
 | 
							$(1)/usr/sbin
 | 
				
			||||||
 | 
						$(INSTALL_BIN) \
 | 
				
			||||||
 | 
							$(PKG_INSTALL_DIR)/usr/sbin/unetd \
 | 
				
			||||||
 | 
							$(1)/usr/sbin/
 | 
				
			||||||
 | 
						$(INSTALL_BIN) ./files/unetd.init $(1)/etc/init.d/unetd
 | 
				
			||||||
 | 
						$(INSTALL_BIN) ./files/unetd.sh $(1)/lib/netifd/proto
 | 
				
			||||||
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(eval $(call BuildPackage,unetd))
 | 
				
			||||||
							
								
								
									
										15
									
								
								feeds/ucentral/unetd/files/unetd.init
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								feeds/ucentral/unetd/files/unetd.init
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					#!/bin/sh /etc/rc.common
 | 
				
			||||||
 | 
					# Copyright (c) 2021 OpenWrt.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					START=19
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USE_PROCD=1
 | 
				
			||||||
 | 
					PROG=/usr/sbin/unetd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start_service() {
 | 
				
			||||||
 | 
						mkdir -p /var/run/unetd
 | 
				
			||||||
 | 
						procd_open_instance
 | 
				
			||||||
 | 
						procd_set_param command "$PROG" -h /var/run/unetd/hosts
 | 
				
			||||||
 | 
						procd_set_param respawn
 | 
				
			||||||
 | 
						procd_close_instance
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										67
									
								
								feeds/ucentral/unetd/files/unetd.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								feeds/ucentral/unetd/files/unetd.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ -x /usr/sbin/unetd ] || exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					. /lib/functions.sh
 | 
				
			||||||
 | 
					. /lib/functions/network.sh
 | 
				
			||||||
 | 
					. ../netifd-proto.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_proto "$@"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proto_unet_init_config() {
 | 
				
			||||||
 | 
						proto_config_add_string device
 | 
				
			||||||
 | 
						proto_config_add_string type
 | 
				
			||||||
 | 
						proto_config_add_string key
 | 
				
			||||||
 | 
						proto_config_add_string file
 | 
				
			||||||
 | 
						proto_config_add_int keepalive
 | 
				
			||||||
 | 
						proto_config_add_string domain
 | 
				
			||||||
 | 
						no_device=1
 | 
				
			||||||
 | 
						available=1
 | 
				
			||||||
 | 
						no_proto_task=1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proto_unet_setup() {
 | 
				
			||||||
 | 
						local config="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local device type key file keepalive domain
 | 
				
			||||||
 | 
						json_get_vars device type key file keepalive domain
 | 
				
			||||||
 | 
						device="${device:-$config}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[ -n "$file" ] && type="${type:-file}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json_init
 | 
				
			||||||
 | 
						json_add_string name "$device"
 | 
				
			||||||
 | 
						json_add_string type "$type"
 | 
				
			||||||
 | 
						json_add_string interface "$config"
 | 
				
			||||||
 | 
						json_add_string key "$key"
 | 
				
			||||||
 | 
						json_add_string file "$file"
 | 
				
			||||||
 | 
						[ -n "$keepalive" ] && json_add_int keepalive "$keepalive"
 | 
				
			||||||
 | 
						json_add_string domain "$domain"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ip link del dev "$device" >/dev/null 2>&1
 | 
				
			||||||
 | 
						ip link add dev "$device" type wireguard || {
 | 
				
			||||||
 | 
							echo "Could not create wireguard device $device"
 | 
				
			||||||
 | 
							proto_setup_failed "$config"
 | 
				
			||||||
 | 
							exit 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ubus call unetd network_add "$(json_dump)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proto_unet_teardown() {
 | 
				
			||||||
 | 
						local config="$1"
 | 
				
			||||||
 | 
						local iface="$2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local device
 | 
				
			||||||
 | 
						json_get_vars device
 | 
				
			||||||
 | 
						device="${device:-$iface}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						json_init
 | 
				
			||||||
 | 
						json_add_string name "$device"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ip link del dev "$device"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ubus call unetd network_del "$(json_dump)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_protocol unet
 | 
				
			||||||
@@ -143,5 +143,5 @@ start_service()
 | 
				
			|||||||
	procd_open_instance
 | 
						procd_open_instance
 | 
				
			||||||
	procd_set_param command "/usr/libexec/uchannel.uc"
 | 
						procd_set_param command "/usr/libexec/uchannel.uc"
 | 
				
			||||||
	procd_set_param respawn 1 300 0
 | 
						procd_set_param respawn 1 300 0
 | 
				
			||||||
	procd_close_instancea
 | 
						procd_close_instance
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
#!/usr/bin/ucode
 | 
					#!/usr/bin/ucode
 | 
				
			||||||
{%
 | 
					 | 
				
			||||||
let fs = require("fs");
 | 
					let fs = require("fs");
 | 
				
			||||||
let ubus = require("ubus");
 | 
					let ubus = require("ubus");
 | 
				
			||||||
let conn = ubus.connect();
 | 
					let conn = ubus.connect();
 | 
				
			||||||
@@ -56,7 +55,7 @@ function state_get() {
 | 
				
			|||||||
function state_set(state) {
 | 
					function state_set(state) {
 | 
				
			||||||
	let file = fs.open("/tmp/uchannel.json", "w");
 | 
						let file = fs.open("/tmp/uchannel.json", "w");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	state.uptime = uptime;
 | 
						state.executed = uptime;
 | 
				
			||||||
	file.write(state);
 | 
						file.write(state);
 | 
				
			||||||
	file.close();
 | 
						file.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,7 +63,7 @@ function state_set(state) {
 | 
				
			|||||||
		node: "*",
 | 
							node: "*",
 | 
				
			||||||
		data: {
 | 
							data: {
 | 
				
			||||||
			status: state.status,
 | 
								status: state.status,
 | 
				
			||||||
			uptime: state.uptime,
 | 
								uptime: state.executed,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
	printf("entering %s state\n", state.status);
 | 
						printf("entering %s state\n", state.status);
 | 
				
			||||||
@@ -259,8 +258,8 @@ function channel_balance(band, mask) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function youngest() {
 | 
					function youngest() {
 | 
				
			||||||
	for (let ip, host in hosts) {
 | 
						for (let ip, host in hosts) {
 | 
				
			||||||
		if (host.host_info.status == "overlap" &&
 | 
							if (host.host_info?.status == "overlap" &&
 | 
				
			||||||
		    host.host_info.uptime < uptime) {
 | 
							    host.host_info?.uptime < uptime) {
 | 
				
			||||||
			print("Found a younger host\n");
 | 
								print("Found a younger host\n");
 | 
				
			||||||
			return 1;
 | 
								return 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -272,7 +271,7 @@ function youngest() {
 | 
				
			|||||||
let state = state_get();
 | 
					let state = state_get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (state.status == "waiting" &&
 | 
					if (state.status == "waiting" &&
 | 
				
			||||||
    (uptime - state.uptime < (12 * 60 * 60))) {
 | 
					    (uptime - state.changed < (12 * 60 * 60))) {
 | 
				
			||||||
	state_set(state);
 | 
						state_set(state);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -328,4 +327,3 @@ for (let freq, obj in overlap) {
 | 
				
			|||||||
state.status = "waiting";
 | 
					state.status = "waiting";
 | 
				
			||||||
state.changed = uptime;
 | 
					state.changed = uptime;
 | 
				
			||||||
state_set(state);
 | 
					state_set(state);
 | 
				
			||||||
%}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ define Package/$(PKG_NAME)
 | 
				
			|||||||
  URL:=http://www.qca.qualcomm.com
 | 
					  URL:=http://www.qca.qualcomm.com
 | 
				
			||||||
  MAINTAINER:=Qualcomm Atheros
 | 
					  MAINTAINER:=Qualcomm Atheros
 | 
				
			||||||
  TITLE:= QCA ftm utils
 | 
					  TITLE:= QCA ftm utils
 | 
				
			||||||
  DEPENDS:= @TARGET_ipq_ipq807x||TARGET_ipq_ipq807x_64||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq_ipq50xx||TARGET_ipq_ipq50xx_64||TARGET_ipq807x||TARGET_ipq50xx +libnl +libtcmd +qca-diag +librt +FEATURE_QCA_IOT:qca-IOT +FEATURE_QCA_IOT_IPQ50XX_SUPPORT:btdaemon +kmod-diag-char
 | 
					  DEPENDS:= @TARGET_ipq_ipq807x||TARGET_ipq_ipq807x_64||TARGET_ipq_ipq60xx||TARGET_ipq_ipq60xx_64||TARGET_ipq_ipq50xx||TARGET_ipq_ipq50xx_64||TARGET_ipq807x||TARGET_ipq50xx +libnl +libtcmd +qca-diag +librt +kmod-diag-char
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define Package/$(PKG_NAME)/description/Default
 | 
					define Package/$(PKG_NAME)/description/Default
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -371,9 +371,9 @@ CONFIG_INTERWORKING=y
 | 
				
			|||||||
CONFIG_TAXONOMY=y
 | 
					CONFIG_TAXONOMY=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Fast Initial Link Setup (FILS) (IEEE 802.11ai)
 | 
					# Fast Initial Link Setup (FILS) (IEEE 802.11ai)
 | 
				
			||||||
#CONFIG_FILS=y
 | 
					CONFIG_FILS=y
 | 
				
			||||||
# FILS shared key authentication with PFS
 | 
					# FILS shared key authentication with PFS
 | 
				
			||||||
#CONFIG_FILS_SK_PFS=y
 | 
					CONFIG_FILS_SK_PFS=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Include internal line edit mode in hostapd_cli. This can be used to provide
 | 
					# Include internal line edit mode in hostapd_cli. This can be used to provide
 | 
				
			||||||
# limited command line editing and history support.
 | 
					# limited command line editing and history support.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -154,6 +154,8 @@ hostapd_prepare_device_config() {
 | 
				
			|||||||
	set_default ema 0
 | 
						set_default ema 0
 | 
				
			||||||
	set_default acs_exclude_dfs 0
 | 
						set_default acs_exclude_dfs 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[ "$band" = "6g" ] && multiple_bssid=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	[ -n "$country" ] && {
 | 
						[ -n "$country" ] && {
 | 
				
			||||||
		append base_cfg "country_code=$country" "$N"
 | 
							append base_cfg "country_code=$country" "$N"
 | 
				
			||||||
		[ -n "$country3" ] && append base_cfg "country3=$country3" "$N"
 | 
							[ -n "$country3" ] && append base_cfg "country3=$country3" "$N"
 | 
				
			||||||
@@ -704,7 +706,7 @@ hostapd_set_bss_options() {
 | 
				
			|||||||
			set_default ieee80211w 2
 | 
								set_default ieee80211w 2
 | 
				
			||||||
			set_default sae_require_mfp 1
 | 
								set_default sae_require_mfp 1
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
		psk-sae|eap-eap256)
 | 
							psk-sae|psk2-radius|eap-eap256)
 | 
				
			||||||
			set_default ieee80211w 1
 | 
								set_default ieee80211w 1
 | 
				
			||||||
			set_default sae_require_mfp 1
 | 
								set_default sae_require_mfp 1
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
@@ -767,6 +769,11 @@ hostapd_set_bss_options() {
 | 
				
			|||||||
			append bss_conf "wep_default_key=$wep_keyidx" "$N"
 | 
								append bss_conf "wep_default_key=$wep_keyidx" "$N"
 | 
				
			||||||
			[ -n "$wep_rekey" ] && append bss_conf "wep_rekey_period=$wep_rekey" "$N"
 | 
								[ -n "$wep_rekey" ] && append bss_conf "wep_rekey_period=$wep_rekey" "$N"
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
 | 
							psk2-radius)
 | 
				
			||||||
 | 
								append bss_conf "wpa_psk_radius=3" "$N"
 | 
				
			||||||
 | 
								append_radius_server
 | 
				
			||||||
 | 
								vlan_possible=1
 | 
				
			||||||
 | 
							;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local auth_algs=$((($auth_mode_shared << 1) | $auth_mode_open))
 | 
						local auth_algs=$((($auth_mode_shared << 1) | $auth_mode_open))
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								feeds/wifi-ax/hostapd/patches/780-maxassoc.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								feeds/wifi-ax/hostapd/patches/780-maxassoc.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					Index: hostapd-2021-02-20-59e9794c/src/ap/sta_info.c
 | 
				
			||||||
 | 
					===================================================================
 | 
				
			||||||
 | 
					--- hostapd-2021-02-20-59e9794c.orig/src/ap/sta_info.c
 | 
				
			||||||
 | 
					+++ hostapd-2021-02-20-59e9794c/src/ap/sta_info.c
 | 
				
			||||||
 | 
					@@ -717,7 +717,7 @@ struct sta_info * ap_sta_add(struct host
 | 
				
			||||||
 | 
					 		return sta;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	wpa_printf(MSG_DEBUG, "  New STA");
 | 
				
			||||||
 | 
					-	if (hapd->num_sta >= hapd->conf->max_num_sta) {
 | 
				
			||||||
 | 
					+	if (hostapd_check_max_sta(hapd)) {
 | 
				
			||||||
 | 
					 		/* FIX: might try to remove some old STAs first? */
 | 
				
			||||||
 | 
					 		wpa_printf(MSG_DEBUG, "no more room for new STAs (%d/%d)",
 | 
				
			||||||
 | 
					 			   hapd->num_sta, hapd->conf->max_num_sta);
 | 
				
			||||||
@@ -0,0 +1,459 @@
 | 
				
			|||||||
 | 
					From 1c3438fec4bad13a676617915ff56af54e7b4542 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					Date: Sat, 2 Apr 2022 13:12:43 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] RADIUS ACL/PSK check during 4-way handshake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Add an alternative sequence for performing the RADIUS ACL check and PSK
 | 
				
			||||||
 | 
					fetch. The previously used (macaddr_acl=2, wpa_psk_radius=2) combination
 | 
				
			||||||
 | 
					does this during IEEE 802.11 Authentication frame exchange while the new
 | 
				
			||||||
 | 
					option (wpa_psk_radius=3) does this during the 4-way handshake. This
 | 
				
			||||||
 | 
					allows some more information to be provided to the RADIUS authentication
 | 
				
			||||||
 | 
					server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 hostapd/config_file.c    |  3 +-
 | 
				
			||||||
 | 
					 hostapd/hostapd.conf     |  5 ++-
 | 
				
			||||||
 | 
					 src/ap/ap_config.c       |  4 ++-
 | 
				
			||||||
 | 
					 src/ap/ap_config.h       |  5 +--
 | 
				
			||||||
 | 
					 src/ap/ieee802_11.c      |  5 ++-
 | 
				
			||||||
 | 
					 src/ap/ieee802_11.h      |  2 ++
 | 
				
			||||||
 | 
					 src/ap/ieee802_11_auth.c | 76 ++++++++++++++++++++++++++++++++++++----
 | 
				
			||||||
 | 
					 src/ap/ieee802_11_auth.h |  5 ++-
 | 
				
			||||||
 | 
					 src/ap/wpa_auth.c        | 51 ++++++++++++++++++++++++++-
 | 
				
			||||||
 | 
					 src/ap/wpa_auth.h        |  9 ++++-
 | 
				
			||||||
 | 
					 src/ap/wpa_auth_glue.c   | 25 ++++++++++++-
 | 
				
			||||||
 | 
					 src/ap/wpa_auth_i.h      |  1 +
 | 
				
			||||||
 | 
					 12 files changed, 172 insertions(+), 19 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/hostapd/config_file.c
 | 
				
			||||||
 | 
					+++ b/hostapd/config_file.c
 | 
				
			||||||
 | 
					@@ -2858,7 +2858,8 @@ static int hostapd_config_fill(struct ho
 | 
				
			||||||
 | 
					 		bss->wpa_psk_radius = atoi(pos);
 | 
				
			||||||
 | 
					 		if (bss->wpa_psk_radius != PSK_RADIUS_IGNORED &&
 | 
				
			||||||
 | 
					 		    bss->wpa_psk_radius != PSK_RADIUS_ACCEPTED &&
 | 
				
			||||||
 | 
					-		    bss->wpa_psk_radius != PSK_RADIUS_REQUIRED) {
 | 
				
			||||||
 | 
					+		    bss->wpa_psk_radius != PSK_RADIUS_REQUIRED &&
 | 
				
			||||||
 | 
					+		    bss->wpa_psk_radius != PSK_RADIUS_DURING_4WAY_HS) {
 | 
				
			||||||
 | 
					 			wpa_printf(MSG_ERROR,
 | 
				
			||||||
 | 
					 				   "Line %d: unknown wpa_psk_radius %d",
 | 
				
			||||||
 | 
					 				   line, bss->wpa_psk_radius);
 | 
				
			||||||
 | 
					--- a/hostapd/hostapd.conf
 | 
				
			||||||
 | 
					+++ b/hostapd/hostapd.conf
 | 
				
			||||||
 | 
					@@ -1635,12 +1635,15 @@ own_ip_addr=127.0.0.1
 | 
				
			||||||
 | 
					 #wpa_psk_file=/etc/hostapd.wpa_psk
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 # Optionally, WPA passphrase can be received from RADIUS authentication server
 | 
				
			||||||
 | 
					-# This requires macaddr_acl to be set to 2 (RADIUS)
 | 
				
			||||||
 | 
					+# This requires macaddr_acl to be set to 2 (RADIUS) for wpa_psk_radius values
 | 
				
			||||||
 | 
					+# 1 and 2.
 | 
				
			||||||
 | 
					 # 0 = disabled (default)
 | 
				
			||||||
 | 
					 # 1 = optional; use default passphrase/psk if RADIUS server does not include
 | 
				
			||||||
 | 
					 #	Tunnel-Password
 | 
				
			||||||
 | 
					 # 2 = required; reject authentication if RADIUS server does not include
 | 
				
			||||||
 | 
					 #	Tunnel-Password
 | 
				
			||||||
 | 
					+# 3 = ask RADIUS server during 4-way handshake if there is no locally
 | 
				
			||||||
 | 
					+#	configured PSK/passphrase for the STA
 | 
				
			||||||
 | 
					 #wpa_psk_radius=0
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 # Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The
 | 
				
			||||||
 | 
					--- a/src/ap/ap_config.c
 | 
				
			||||||
 | 
					+++ b/src/ap/ap_config.c
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * hostapd / Configuration helper functions
 | 
				
			||||||
 | 
					- * Copyright (c) 2003-2014, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -1245,6 +1245,7 @@ static int hostapd_config_check_bss(stru
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (full_config && bss->wpa &&
 | 
				
			||||||
 | 
					 	    bss->wpa_psk_radius != PSK_RADIUS_IGNORED &&
 | 
				
			||||||
 | 
					+	    bss->wpa_psk_radius != PSK_RADIUS_DURING_4WAY_HS &&
 | 
				
			||||||
 | 
					 	    bss->macaddr_acl != USE_EXTERNAL_RADIUS_AUTH) {
 | 
				
			||||||
 | 
					 		wpa_printf(MSG_ERROR, "WPA-PSK using RADIUS enabled, but no "
 | 
				
			||||||
 | 
					 			   "RADIUS checking (macaddr_acl=2) enabled.");
 | 
				
			||||||
 | 
					@@ -1254,6 +1255,7 @@ static int hostapd_config_check_bss(stru
 | 
				
			||||||
 | 
					 	if (full_config && bss->wpa && (bss->wpa_key_mgmt & WPA_KEY_MGMT_PSK) &&
 | 
				
			||||||
 | 
					 	    bss->ssid.wpa_psk == NULL && bss->ssid.wpa_passphrase == NULL &&
 | 
				
			||||||
 | 
					 	    bss->ssid.wpa_psk_file == NULL &&
 | 
				
			||||||
 | 
					+	    bss->wpa_psk_radius != PSK_RADIUS_DURING_4WAY_HS &&
 | 
				
			||||||
 | 
					 	    (bss->wpa_psk_radius != PSK_RADIUS_REQUIRED ||
 | 
				
			||||||
 | 
					 	     bss->macaddr_acl != USE_EXTERNAL_RADIUS_AUTH)) {
 | 
				
			||||||
 | 
					 		wpa_printf(MSG_ERROR, "WPA-PSK enabled, but PSK or passphrase "
 | 
				
			||||||
 | 
					--- a/src/ap/ap_config.h
 | 
				
			||||||
 | 
					+++ b/src/ap/ap_config.h
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * hostapd / Configuration definitions and helpers functions
 | 
				
			||||||
 | 
					- * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -367,7 +367,8 @@ struct hostapd_bss_config {
 | 
				
			||||||
 | 
					 	enum {
 | 
				
			||||||
 | 
					 		PSK_RADIUS_IGNORED = 0,
 | 
				
			||||||
 | 
					 		PSK_RADIUS_ACCEPTED = 1,
 | 
				
			||||||
 | 
					-		PSK_RADIUS_REQUIRED = 2
 | 
				
			||||||
 | 
					+		PSK_RADIUS_REQUIRED = 2,
 | 
				
			||||||
 | 
					+		PSK_RADIUS_DURING_4WAY_HS = 3,
 | 
				
			||||||
 | 
					 	} wpa_psk_radius;
 | 
				
			||||||
 | 
					 	int wpa_pairwise;
 | 
				
			||||||
 | 
					 	int group_cipher; /* wpa_group value override from configuation */
 | 
				
			||||||
 | 
					--- a/src/ap/ieee802_11.c
 | 
				
			||||||
 | 
					+++ b/src/ap/ieee802_11.c
 | 
				
			||||||
 | 
					@@ -2348,9 +2348,8 @@ static int ieee802_11_allowed_address(st
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-static int
 | 
				
			||||||
 | 
					-ieee802_11_set_radius_info(struct hostapd_data *hapd, struct sta_info *sta,
 | 
				
			||||||
 | 
					-			   int res, struct radius_sta *info)
 | 
				
			||||||
 | 
					+int ieee802_11_set_radius_info(struct hostapd_data *hapd, struct sta_info *sta,
 | 
				
			||||||
 | 
					+			       int res, struct radius_sta *info)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	u32 session_timeout = info->session_timeout;
 | 
				
			||||||
 | 
					 	u32 acct_interim_interval = info->acct_interim_interval;
 | 
				
			||||||
 | 
					--- a/src/ap/ieee802_11.h
 | 
				
			||||||
 | 
					+++ b/src/ap/ieee802_11.h
 | 
				
			||||||
 | 
					@@ -220,4 +220,6 @@ void auth_sae_process_commit(void *eloop
 | 
				
			||||||
 | 
					 u8 * hostapd_eid_rsnxe(struct hostapd_data *hapd, u8 *eid, size_t len);
 | 
				
			||||||
 | 
					 u8 * hostapd_get_rsne(struct hostapd_data *hapd, u8 *pos, size_t len);
 | 
				
			||||||
 | 
					 u8 * hostapd_get_rsnxe(struct hostapd_data *hapd, u8 *pos, size_t len);
 | 
				
			||||||
 | 
					+int ieee802_11_set_radius_info(struct hostapd_data *hapd, struct sta_info *sta,
 | 
				
			||||||
 | 
					+		                              int res, struct radius_sta *info);
 | 
				
			||||||
 | 
					 #endif /* IEEE802_11_H */
 | 
				
			||||||
 | 
					--- a/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					+++ b/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * hostapd / IEEE 802.11 authentication (ACL)
 | 
				
			||||||
 | 
					- * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -20,6 +20,8 @@
 | 
				
			||||||
 | 
					 #include "hostapd.h"
 | 
				
			||||||
 | 
					 #include "ap_config.h"
 | 
				
			||||||
 | 
					 #include "ap_drv_ops.h"
 | 
				
			||||||
 | 
					+#include "sta_info.h"
 | 
				
			||||||
 | 
					+#include "wpa_auth.h"
 | 
				
			||||||
 | 
					 #include "ieee802_11.h"
 | 
				
			||||||
 | 
					 #include "ieee802_1x.h"
 | 
				
			||||||
 | 
					 #include "ieee802_11_auth.h"
 | 
				
			||||||
 | 
					@@ -43,6 +45,8 @@ struct hostapd_acl_query_data {
 | 
				
			||||||
 | 
					 	u8 *auth_msg; /* IEEE 802.11 authentication frame from station */
 | 
				
			||||||
 | 
					 	size_t auth_msg_len;
 | 
				
			||||||
 | 
					 	struct hostapd_acl_query_data *next;
 | 
				
			||||||
 | 
					+	bool radius_psk;
 | 
				
			||||||
 | 
					+	int akm;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -153,6 +157,13 @@ static int hostapd_radius_acl_query(stru
 | 
				
			||||||
 | 
					 		goto fail;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (query->akm &&
 | 
				
			||||||
 | 
					+	    !radius_msg_add_attr_int32(msg, RADIUS_ATTR_WLAN_AKM_SUITE,
 | 
				
			||||||
 | 
					+				       wpa_akm_to_suite(query->akm))) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "Could not add WLAN-AKM-Suite");
 | 
				
			||||||
 | 
					+		goto fail;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, addr) < 0)
 | 
				
			||||||
 | 
					 		goto fail;
 | 
				
			||||||
 | 
					 	return 0;
 | 
				
			||||||
 | 
					@@ -566,17 +577,40 @@ hostapd_acl_recv_radius(struct radius_ms
 | 
				
			||||||
 | 
					 	cache->next = hapd->acl_cache;
 | 
				
			||||||
 | 
					 	hapd->acl_cache = cache;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (query->radius_psk) {
 | 
				
			||||||
 | 
					+		struct sta_info *sta;
 | 
				
			||||||
 | 
					+		bool success = cache->accepted == HOSTAPD_ACL_ACCEPT;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		sta = ap_get_sta(hapd, query->addr);
 | 
				
			||||||
 | 
					+		if (!sta || !sta->wpa_sm) {
 | 
				
			||||||
 | 
					+			wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					+				   "No STA/SM entry found for the RADIUS PSK response");
 | 
				
			||||||
 | 
					+			goto done;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+#ifdef NEED_AP_MLME
 | 
				
			||||||
 | 
					+		if (success &&
 | 
				
			||||||
 | 
					+		    (ieee802_11_set_radius_info(hapd, sta, cache->accepted,
 | 
				
			||||||
 | 
					+						info) < 0 ||
 | 
				
			||||||
 | 
					+		     ap_sta_bind_vlan(hapd, sta) < 0))
 | 
				
			||||||
 | 
					+			success = false;
 | 
				
			||||||
 | 
					+#endif /* NEED_AP_MLME */
 | 
				
			||||||
 | 
					+		wpa_auth_sta_radius_psk_resp(sta->wpa_sm, success);
 | 
				
			||||||
 | 
					+	} else {
 | 
				
			||||||
 | 
					 #ifdef CONFIG_DRIVER_RADIUS_ACL
 | 
				
			||||||
 | 
					-	hostapd_drv_set_radius_acl_auth(hapd, query->addr, cache->accepted,
 | 
				
			||||||
 | 
					-					info->session_timeout);
 | 
				
			||||||
 | 
					+		hostapd_drv_set_radius_acl_auth(hapd, query->addr,
 | 
				
			||||||
 | 
					+						cache->accepted,
 | 
				
			||||||
 | 
					+						info->session_timeout);
 | 
				
			||||||
 | 
					 #else /* CONFIG_DRIVER_RADIUS_ACL */
 | 
				
			||||||
 | 
					 #ifdef NEED_AP_MLME
 | 
				
			||||||
 | 
					-	/* Re-send original authentication frame for 802.11 processing */
 | 
				
			||||||
 | 
					-	wpa_printf(MSG_DEBUG, "Re-sending authentication frame after "
 | 
				
			||||||
 | 
					-		   "successful RADIUS ACL query");
 | 
				
			||||||
 | 
					-	ieee802_11_mgmt(hapd, query->auth_msg, query->auth_msg_len, NULL);
 | 
				
			||||||
 | 
					+		/* Re-send original authentication frame for 802.11 processing
 | 
				
			||||||
 | 
					+		 */
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					+			   "Re-sending authentication frame after successful RADIUS ACL query");
 | 
				
			||||||
 | 
					+		ieee802_11_mgmt(hapd, query->auth_msg, query->auth_msg_len,
 | 
				
			||||||
 | 
					+				NULL);
 | 
				
			||||||
 | 
					 #endif /* NEED_AP_MLME */
 | 
				
			||||||
 | 
					 #endif /* CONFIG_DRIVER_RADIUS_ACL */
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  done:
 | 
				
			||||||
 | 
					 	if (prev == NULL)
 | 
				
			||||||
 | 
					@@ -658,3 +692,31 @@ void hostapd_free_psk_list(struct hostap
 | 
				
			||||||
 | 
					 		os_free(prev);
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#ifndef CONFIG_NO_RADIUS
 | 
				
			||||||
 | 
					+void hostapd_acl_req_radius_psk(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					+				int key_mgmt, const u8 *anonce,
 | 
				
			||||||
 | 
					+				const u8 *eapol, size_t eapol_len)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	struct hostapd_acl_query_data *query;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	query = os_zalloc(sizeof(*query));
 | 
				
			||||||
 | 
					+	if (!query)
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	query->radius_psk = true;
 | 
				
			||||||
 | 
					+	query->akm = key_mgmt;
 | 
				
			||||||
 | 
					+	os_get_reltime(&query->timestamp);
 | 
				
			||||||
 | 
					+	os_memcpy(query->addr, addr, ETH_ALEN);
 | 
				
			||||||
 | 
					+	if (hostapd_radius_acl_query(hapd, addr, query)) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					+			   "Failed to send Access-Request for RADIUS PSK/ACL query");
 | 
				
			||||||
 | 
					+		hostapd_acl_query_free(query);
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	query->next = hapd->acl_queries;
 | 
				
			||||||
 | 
					+	hapd->acl_queries = query;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+#endif /* CONFIG_NO_RADIUS */
 | 
				
			||||||
 | 
					--- a/src/ap/ieee802_11_auth.h
 | 
				
			||||||
 | 
					+++ b/src/ap/ieee802_11_auth.h
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * hostapd / IEEE 802.11 authentication (ACL)
 | 
				
			||||||
 | 
					- * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -36,5 +36,8 @@ void hostapd_free_psk_list(struct hostap
 | 
				
			||||||
 | 
					 void hostapd_acl_expire(struct hostapd_data *hapd);
 | 
				
			||||||
 | 
					 void hostapd_copy_psk_list(struct hostapd_sta_wpa_psk_short **psk,
 | 
				
			||||||
 | 
					 			   struct hostapd_sta_wpa_psk_short *src);
 | 
				
			||||||
 | 
					+void hostapd_acl_req_radius_psk(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					+				int key_mgmt, const u8 *anonce,
 | 
				
			||||||
 | 
					+				const u8 *eapol, size_t eapol_len);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #endif /* IEEE802_11_AUTH_H */
 | 
				
			||||||
 | 
					--- a/src/ap/wpa_auth.c
 | 
				
			||||||
 | 
					+++ b/src/ap/wpa_auth.c
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * IEEE 802.11 RSN / WPA Authenticator
 | 
				
			||||||
 | 
					- * Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2004-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -1465,6 +1465,12 @@ static void wpa_send_eapol_timeout(void
 | 
				
			||||||
 | 
					 	struct wpa_authenticator *wpa_auth = eloop_ctx;
 | 
				
			||||||
 | 
					 	struct wpa_state_machine *sm = timeout_ctx;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (sm->waiting_radius_psk) {
 | 
				
			||||||
 | 
					+		wpa_auth_logger(wpa_auth, sm->addr, LOGGER_DEBUG,
 | 
				
			||||||
 | 
					+				"Ignore EAPOL-Key timeout while waiting for RADIUS PSK");
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	sm->pending_1_of_4_timeout = 0;
 | 
				
			||||||
 | 
					 	wpa_auth_logger(wpa_auth, sm->addr, LOGGER_DEBUG, "EAPOL-Key timeout");
 | 
				
			||||||
 | 
					 	sm->TimeoutEvt = true;
 | 
				
			||||||
 | 
					@@ -3003,6 +3009,19 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING)
 | 
				
			||||||
 | 
					 			break;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (!ok && wpa_key_mgmt_wpa_psk_no_sae(sm->wpa_key_mgmt) &&
 | 
				
			||||||
 | 
					+	    wpa_auth->conf.radius_psk && wpa_auth->cb->request_radius_psk &&
 | 
				
			||||||
 | 
					+	    !sm->waiting_radius_psk) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "No PSK available - ask RADIUS server");
 | 
				
			||||||
 | 
					+		wpa_auth->cb->request_radius_psk(wpa_auth->cb_ctx, sm->addr,
 | 
				
			||||||
 | 
					+						 sm->wpa_key_mgmt,
 | 
				
			||||||
 | 
					+						 sm->ANonce,
 | 
				
			||||||
 | 
					+						 sm->last_rx_eapol_key,
 | 
				
			||||||
 | 
					+						 sm->last_rx_eapol_key_len);
 | 
				
			||||||
 | 
					+		sm->waiting_radius_psk = 1;
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	if (!ok) {
 | 
				
			||||||
 | 
					 		wpa_auth_logger(sm->wpa_auth, sm->addr, LOGGER_DEBUG,
 | 
				
			||||||
 | 
					 				"invalid MIC in msg 2/4 of 4-Way Handshake");
 | 
				
			||||||
 | 
					@@ -3758,6 +3777,11 @@ SM_STEP(WPA_PTK)
 | 
				
			||||||
 | 
					 		} else if (wpa_auth_uses_sae(sm) && sm->pmksa) {
 | 
				
			||||||
 | 
					 			SM_ENTER(WPA_PTK, PTKSTART);
 | 
				
			||||||
 | 
					 #endif /* CONFIG_SAE */
 | 
				
			||||||
 | 
					+		} else if (wpa_key_mgmt_wpa_psk_no_sae(sm->wpa_key_mgmt) &&
 | 
				
			||||||
 | 
					+			   wpa_auth->conf.radius_psk) {
 | 
				
			||||||
 | 
					+			wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					+				   "INITPSK: No PSK yet available for STA - use RADIUS later");
 | 
				
			||||||
 | 
					+			SM_ENTER(WPA_PTK, PTKSTART);
 | 
				
			||||||
 | 
					 		} else {
 | 
				
			||||||
 | 
					 			wpa_auth_logger(wpa_auth, sm->addr, LOGGER_INFO,
 | 
				
			||||||
 | 
					 					"no PSK configured for the STA");
 | 
				
			||||||
 | 
					@@ -5661,3 +5685,28 @@ void wpa_auth_set_ocv_override_freq(stru
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #endif /* CONFIG_TESTING_OPTIONS */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+void wpa_auth_sta_radius_psk_resp(struct wpa_state_machine *sm, bool success)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	if (!sm->waiting_radius_psk) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					+			   "Ignore RADIUS PSK response for " MACSTR
 | 
				
			||||||
 | 
					+			   " that did not wait one",
 | 
				
			||||||
 | 
					+			   MAC2STR(sm->addr));
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	wpa_printf(MSG_DEBUG, "RADIUS PSK response for " MACSTR " (%s)",
 | 
				
			||||||
 | 
					+		   MAC2STR(sm->addr), success ? "success" : "fail");
 | 
				
			||||||
 | 
					+	sm->waiting_radius_psk = 0;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (success) {
 | 
				
			||||||
 | 
					+		/* Try to process the EAPOL-Key msg 2/4 again */
 | 
				
			||||||
 | 
					+		sm->EAPOLKeyReceived = true;
 | 
				
			||||||
 | 
					+	} else {
 | 
				
			||||||
 | 
					+		sm->Disconnect = true;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	eloop_register_timeout(0, 0, wpa_sm_call_step, sm, NULL);
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					--- a/src/ap/wpa_auth.h
 | 
				
			||||||
 | 
					+++ b/src/ap/wpa_auth.h
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * hostapd - IEEE 802.11i-2004 / WPA Authenticator
 | 
				
			||||||
 | 
					- * Copyright (c) 2004-2017, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2004-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -273,6 +273,8 @@ struct wpa_auth_config {
 | 
				
			||||||
 | 
					 	 * PTK derivation regardless of advertised capabilities.
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
					 	bool force_kdk_derivation;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	bool radius_psk;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 typedef enum {
 | 
				
			||||||
 | 
					@@ -320,6 +322,9 @@ struct wpa_auth_callbacks {
 | 
				
			||||||
 | 
					 	void (*store_ptksa)(void *ctx, const u8 *addr, int cipher,
 | 
				
			||||||
 | 
					 			    u32 life_time, const struct wpa_ptk *ptk);
 | 
				
			||||||
 | 
					 	void (*clear_ptksa)(void *ctx, const u8 *addr, int cipher);
 | 
				
			||||||
 | 
					+	void (*request_radius_psk)(void *ctx, const u8 *addr, int key_mgmt,
 | 
				
			||||||
 | 
					+				   const u8 *anonce,
 | 
				
			||||||
 | 
					+				   const u8 *eapol, size_t eapol_len);
 | 
				
			||||||
 | 
					 #ifdef CONFIG_IEEE80211R_AP
 | 
				
			||||||
 | 
					 	struct wpa_state_machine * (*add_sta)(void *ctx, const u8 *sta_addr);
 | 
				
			||||||
 | 
					 	int (*add_sta_ft)(void *ctx, const u8 *sta_addr);
 | 
				
			||||||
 | 
					@@ -567,4 +572,6 @@ void wpa_auth_set_ocv_override_freq(stru
 | 
				
			||||||
 | 
					 				    enum wpa_auth_ocv_override_frame frame,
 | 
				
			||||||
 | 
					 				    unsigned int freq);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+void wpa_auth_sta_radius_psk_resp(struct wpa_state_machine *sm, bool success);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 #endif /* WPA_AUTH_H */
 | 
				
			||||||
 | 
					--- a/src/ap/wpa_auth_glue.c
 | 
				
			||||||
 | 
					+++ b/src/ap/wpa_auth_glue.c
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * hostapd / WPA authenticator glue code
 | 
				
			||||||
 | 
					- * Copyright (c) 2002-2012, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2002-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -29,6 +29,7 @@
 | 
				
			||||||
 | 
					 #include "ap_drv_ops.h"
 | 
				
			||||||
 | 
					 #include "ap_config.h"
 | 
				
			||||||
 | 
					 #include "ieee802_11.h"
 | 
				
			||||||
 | 
					+#include "ieee802_11_auth.h"
 | 
				
			||||||
 | 
					 #include "pmksa_cache_auth.h"
 | 
				
			||||||
 | 
					 #include "wpa_auth.h"
 | 
				
			||||||
 | 
					 #include "wpa_auth_glue.h"
 | 
				
			||||||
 | 
					@@ -214,6 +215,8 @@ static void hostapd_wpa_auth_conf(struct
 | 
				
			||||||
 | 
					 	wconf->force_kdk_derivation = conf->force_kdk_derivation;
 | 
				
			||||||
 | 
					 #endif /* CONFIG_TESTING_OPTIONS */
 | 
				
			||||||
 | 
					 #endif /* CONFIG_PASN */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	wconf->radius_psk = conf->wpa_psk_radius == PSK_RADIUS_DURING_4WAY_HS;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -1435,6 +1438,23 @@ static void hostapd_wpa_unregister_ft_ou
 | 
				
			||||||
 | 
					 #endif /* CONFIG_IEEE80211R_AP */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+#ifndef CONFIG_NO_RADIUS
 | 
				
			||||||
 | 
					+static void hostapd_request_radius_psk(void *ctx, const u8 *addr, int key_mgmt,
 | 
				
			||||||
 | 
					+				       const u8 *anonce,
 | 
				
			||||||
 | 
					+				       const u8 *eapol, size_t eapol_len)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	struct hostapd_data *hapd = ctx;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	wpa_printf(MSG_DEBUG, "RADIUS PSK request for " MACSTR " key_mgmt=0x%x",
 | 
				
			||||||
 | 
					+		   MAC2STR(addr), key_mgmt);
 | 
				
			||||||
 | 
					+	wpa_hexdump(MSG_DEBUG, "ANonce", anonce, WPA_NONCE_LEN);
 | 
				
			||||||
 | 
					+	wpa_hexdump(MSG_DEBUG, "EAPOL", eapol, eapol_len);
 | 
				
			||||||
 | 
					+	hostapd_acl_req_radius_psk(hapd, addr, key_mgmt, anonce, eapol,
 | 
				
			||||||
 | 
					+				   eapol_len);
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+#endif /* CONFIG_NO_RADIUS */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 int hostapd_setup_wpa(struct hostapd_data *hapd)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct wpa_auth_config _conf;
 | 
				
			||||||
 | 
					@@ -1478,6 +1498,9 @@ int hostapd_setup_wpa(struct hostapd_dat
 | 
				
			||||||
 | 
					 		.set_session_timeout = hostapd_wpa_auth_set_session_timeout,
 | 
				
			||||||
 | 
					 		.get_session_timeout = hostapd_wpa_auth_get_session_timeout,
 | 
				
			||||||
 | 
					 #endif /* CONFIG_IEEE80211R_AP */
 | 
				
			||||||
 | 
					+#ifndef CONFIG_NO_RADIUS
 | 
				
			||||||
 | 
					+		.request_radius_psk = hostapd_request_radius_psk,
 | 
				
			||||||
 | 
					+#endif /* CONFIG_NO_RADIUS */
 | 
				
			||||||
 | 
					 	};
 | 
				
			||||||
 | 
					 	const u8 *wpa_ie;
 | 
				
			||||||
 | 
					 	size_t wpa_ie_len;
 | 
				
			||||||
 | 
					--- a/src/ap/wpa_auth_i.h
 | 
				
			||||||
 | 
					+++ b/src/ap/wpa_auth_i.h
 | 
				
			||||||
 | 
					@@ -89,6 +89,7 @@ struct wpa_state_machine {
 | 
				
			||||||
 | 
					 	unsigned int rx_eapol_key_secure:1;
 | 
				
			||||||
 | 
					 	unsigned int update_snonce:1;
 | 
				
			||||||
 | 
					 	unsigned int alt_snonce_valid:1;
 | 
				
			||||||
 | 
					+	unsigned int waiting_radius_psk:1;
 | 
				
			||||||
 | 
					 #ifdef CONFIG_IEEE80211R_AP
 | 
				
			||||||
 | 
					 	unsigned int ft_completed:1;
 | 
				
			||||||
 | 
					 	unsigned int pmk_r1_name_valid:1;
 | 
				
			||||||
@@ -0,0 +1,350 @@
 | 
				
			|||||||
 | 
					From 24763e3cd0a564eb71f3c501bbb4fbb0d7070762 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					Date: Fri, 15 Apr 2022 17:31:48 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] RADIUS: Attributes with Extended Types (RFC 6929)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Supported extended types for RADIUS attributes for the cases defined in
 | 
				
			||||||
 | 
					RFC 6929.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 src/radius/radius.c | 195 ++++++++++++++++++++++++++++++++++++++------
 | 
				
			||||||
 | 
					 src/radius/radius.h |  26 +++++-
 | 
				
			||||||
 | 
					 2 files changed, 193 insertions(+), 28 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/src/radius/radius.c b/src/radius/radius.c
 | 
				
			||||||
 | 
					index be16e27b9..a64228067 100644
 | 
				
			||||||
 | 
					--- a/src/radius/radius.c
 | 
				
			||||||
 | 
					+++ b/src/radius/radius.c
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * RADIUS message processing
 | 
				
			||||||
 | 
					- * Copyright (c) 2002-2009, 2011-2015, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2002-2009, 2011-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -159,7 +159,8 @@ static const char *radius_code_string(u8 code)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 struct radius_attr_type {
 | 
				
			||||||
 | 
					-	u8 type;
 | 
				
			||||||
 | 
					+	u16 type; /* 0..255 for basic types;
 | 
				
			||||||
 | 
					+		   * (241 << 8) | <ext-type> for extended types */
 | 
				
			||||||
 | 
					 	char *name;
 | 
				
			||||||
 | 
					 	enum {
 | 
				
			||||||
 | 
					 		RADIUS_ATTR_UNDIST, RADIUS_ATTR_TEXT, RADIUS_ATTR_IP,
 | 
				
			||||||
 | 
					@@ -260,11 +261,31 @@ static const struct radius_attr_type radius_attrs[] =
 | 
				
			||||||
 | 
					 	  RADIUS_ATTR_HEXDUMP },
 | 
				
			||||||
 | 
					 	{ RADIUS_ATTR_WLAN_GROUP_MGMT_CIPHER, "WLAN-Group-Mgmt-Pairwise-Cipher",
 | 
				
			||||||
 | 
					 	  RADIUS_ATTR_HEXDUMP },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_TYPE_1, "Extended-Type-1", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_TYPE_2, "Extended-Type-2", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_TYPE_3, "Extended-Type-3", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_TYPE_4, "Extended-Type-4", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_LONG_EXT_TYPE_1, "Long-Extended-Type-1",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_LONG_EXT_TYPE_2, "Long-Extended-Type-2",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_1, "Extended-Vendor-Specific-1",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_2, "Extended-Vendor-Specific-2",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_3, "Extended-Vendor-Specific-3",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_4, "Extended-Vendor-Specific-4",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5, "Extended-Vendor-Specific-5",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_6, "Extended-Vendor-Specific-6",
 | 
				
			||||||
 | 
					+	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 #define RADIUS_ATTRS ARRAY_SIZE(radius_attrs)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-static const struct radius_attr_type *radius_get_attr_type(u8 type)
 | 
				
			||||||
 | 
					+static const struct radius_attr_type * radius_get_attr_type(u16 type)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	size_t i;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -277,23 +298,60 @@ static const struct radius_attr_type *radius_get_attr_type(u8 type)
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+static bool radius_is_long_ext_type(u8 type)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	return type == RADIUS_ATTR_LONG_EXT_TYPE_1 ||
 | 
				
			||||||
 | 
					+		type == RADIUS_ATTR_LONG_EXT_TYPE_2;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+static bool radius_is_ext_type(u8 type)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	return type >= RADIUS_ATTR_EXT_TYPE_1 &&
 | 
				
			||||||
 | 
					+		type <= RADIUS_ATTR_LONG_EXT_TYPE_2;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 static void radius_msg_dump_attr(struct radius_attr_hdr *hdr)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					+	struct radius_attr_hdr_ext *ext = NULL;
 | 
				
			||||||
 | 
					 	const struct radius_attr_type *attr;
 | 
				
			||||||
 | 
					 	int len;
 | 
				
			||||||
 | 
					 	unsigned char *pos;
 | 
				
			||||||
 | 
					 	char buf[1000];
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	attr = radius_get_attr_type(hdr->type);
 | 
				
			||||||
 | 
					+	if (hdr->length < sizeof(struct radius_attr_hdr))
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	wpa_printf(MSG_INFO, "   Attribute %d (%s) length=%d",
 | 
				
			||||||
 | 
					-		   hdr->type, attr ? attr->name : "?Unknown?", hdr->length);
 | 
				
			||||||
 | 
					+	if (radius_is_ext_type(hdr->type)) {
 | 
				
			||||||
 | 
					+		if (hdr->length < 4) {
 | 
				
			||||||
 | 
					+			wpa_printf(MSG_INFO,
 | 
				
			||||||
 | 
					+				   "   Invalid attribute %d (too short for extended type)",
 | 
				
			||||||
 | 
					+				hdr->type);
 | 
				
			||||||
 | 
					+			return;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (attr == NULL || hdr->length < sizeof(struct radius_attr_hdr))
 | 
				
			||||||
 | 
					-		return;
 | 
				
			||||||
 | 
					+		ext = (struct radius_attr_hdr_ext *) hdr;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (ext) {
 | 
				
			||||||
 | 
					+		attr = radius_get_attr_type((ext->type << 8) | ext->ext_type);
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_INFO, "   Attribute %d.%d (%s) length=%d",
 | 
				
			||||||
 | 
					+			   ext->type, ext->ext_type,
 | 
				
			||||||
 | 
					+			   attr ? attr->name : "?Unknown?", ext->length);
 | 
				
			||||||
 | 
					+		pos = (unsigned char *) (ext + 1);
 | 
				
			||||||
 | 
					+		len = ext->length - sizeof(struct radius_attr_hdr_ext);
 | 
				
			||||||
 | 
					+	} else {
 | 
				
			||||||
 | 
					+		attr = radius_get_attr_type(hdr->type);
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_INFO, "   Attribute %d (%s) length=%d",
 | 
				
			||||||
 | 
					+			   hdr->type, attr ? attr->name : "?Unknown?",
 | 
				
			||||||
 | 
					+			   hdr->length);
 | 
				
			||||||
 | 
					+		pos = (unsigned char *) (hdr + 1);
 | 
				
			||||||
 | 
					+		len = hdr->length - sizeof(struct radius_attr_hdr);
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	len = hdr->length - sizeof(struct radius_attr_hdr);
 | 
				
			||||||
 | 
					-	pos = (unsigned char *) (hdr + 1);
 | 
				
			||||||
 | 
					+	if (!attr)
 | 
				
			||||||
 | 
					+		return;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	switch (attr->data_type) {
 | 
				
			||||||
 | 
					 	case RADIUS_ATTR_TEXT:
 | 
				
			||||||
 | 
					@@ -627,22 +685,54 @@ static int radius_msg_add_attr_to_array(struct radius_msg *msg,
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-struct radius_attr_hdr *radius_msg_add_attr(struct radius_msg *msg, u8 type,
 | 
				
			||||||
 | 
					-					    const u8 *data, size_t data_len)
 | 
				
			||||||
 | 
					+struct radius_attr_hdr * radius_msg_add_attr(struct radius_msg *msg, u16 type,
 | 
				
			||||||
 | 
					+					     const u8 *data, size_t data_len)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	size_t buf_needed;
 | 
				
			||||||
 | 
					-	struct radius_attr_hdr *attr;
 | 
				
			||||||
 | 
					+	size_t buf_needed, max_len;
 | 
				
			||||||
 | 
					+	struct radius_attr_hdr *attr = NULL;
 | 
				
			||||||
 | 
					+	struct radius_attr_hdr_ext *ext;
 | 
				
			||||||
 | 
					+	u8 ext_type = 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (TEST_FAIL())
 | 
				
			||||||
 | 
					 		return NULL;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (data_len > RADIUS_MAX_ATTR_LEN) {
 | 
				
			||||||
 | 
					-		wpa_printf(MSG_ERROR, "radius_msg_add_attr: too long attribute (%lu bytes)",
 | 
				
			||||||
 | 
					-		       (unsigned long) data_len);
 | 
				
			||||||
 | 
					-		return NULL;
 | 
				
			||||||
 | 
					+	if (type > 255) {
 | 
				
			||||||
 | 
					+		if (!radius_is_ext_type(type >> 8)) {
 | 
				
			||||||
 | 
					+			wpa_printf(MSG_ERROR,
 | 
				
			||||||
 | 
					+				   "%s: Undefined extended type %d.%d",
 | 
				
			||||||
 | 
					+				   __func__, type >> 8, type & 0xff);
 | 
				
			||||||
 | 
					+			return NULL;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+		ext_type = type & 0xff;
 | 
				
			||||||
 | 
					+		type >>= 8;
 | 
				
			||||||
 | 
					+	} else if (radius_is_ext_type(type)) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_ERROR, "%s: Unexpected extended type use for %d",
 | 
				
			||||||
 | 
					+			   __func__, type);
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	buf_needed = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					+	if (radius_is_long_ext_type(type)) {
 | 
				
			||||||
 | 
					+		size_t hdr_len = sizeof(struct radius_attr_hdr_ext) + 1;
 | 
				
			||||||
 | 
					+		size_t plen = 255 - hdr_len;
 | 
				
			||||||
 | 
					+		size_t num;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		max_len = 4096;
 | 
				
			||||||
 | 
					+		num = (data_len + plen - 1) / plen;
 | 
				
			||||||
 | 
					+		if (num == 0)
 | 
				
			||||||
 | 
					+			num = 1;
 | 
				
			||||||
 | 
					+		buf_needed = num * hdr_len + data_len;
 | 
				
			||||||
 | 
					+	} else if (radius_is_ext_type(type)) {
 | 
				
			||||||
 | 
					+		max_len = RADIUS_MAX_EXT_ATTR_LEN;
 | 
				
			||||||
 | 
					+		buf_needed = sizeof(struct radius_attr_hdr_ext) + data_len;
 | 
				
			||||||
 | 
					+	} else {
 | 
				
			||||||
 | 
					+		max_len = RADIUS_MAX_ATTR_LEN;
 | 
				
			||||||
 | 
					+		buf_needed = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+	if (data_len > max_len) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_ERROR,
 | 
				
			||||||
 | 
					+			   "%s: too long attribute (%zu > %zu bytes)",
 | 
				
			||||||
 | 
					+			   __func__, data_len, max_len);
 | 
				
			||||||
 | 
					+		return NULL;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	if (wpabuf_tailroom(msg->buf) < buf_needed) {
 | 
				
			||||||
 | 
					 		/* allocate more space for message buffer */
 | 
				
			||||||
 | 
					@@ -651,13 +741,44 @@ struct radius_attr_hdr *radius_msg_add_attr(struct radius_msg *msg, u8 type,
 | 
				
			||||||
 | 
					 		msg->hdr = wpabuf_mhead(msg->buf);
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	attr = wpabuf_put(msg->buf, sizeof(struct radius_attr_hdr));
 | 
				
			||||||
 | 
					-	attr->type = type;
 | 
				
			||||||
 | 
					-	attr->length = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					-	wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-	if (radius_msg_add_attr_to_array(msg, attr))
 | 
				
			||||||
 | 
					-		return NULL;
 | 
				
			||||||
 | 
					+	if (radius_is_long_ext_type(type)) {
 | 
				
			||||||
 | 
					+		size_t plen = 255 - sizeof(struct radius_attr_hdr_ext) - 1;
 | 
				
			||||||
 | 
					+		size_t alen;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		do {
 | 
				
			||||||
 | 
					+			alen = data_len > plen ? plen : data_len;
 | 
				
			||||||
 | 
					+			ext = wpabuf_put(msg->buf,
 | 
				
			||||||
 | 
					+					 sizeof(struct radius_attr_hdr_ext));
 | 
				
			||||||
 | 
					+			if (!attr)
 | 
				
			||||||
 | 
					+				attr = (struct radius_attr_hdr *) ext;
 | 
				
			||||||
 | 
					+			ext->type = type;
 | 
				
			||||||
 | 
					+			ext->length = sizeof(*ext) + 1 + alen;
 | 
				
			||||||
 | 
					+			ext->ext_type = ext_type;
 | 
				
			||||||
 | 
					+			wpabuf_put_u8(msg->buf, data_len > alen ? 0x80 : 0);
 | 
				
			||||||
 | 
					+			wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					+			data += alen;
 | 
				
			||||||
 | 
					+			data_len -= alen;
 | 
				
			||||||
 | 
					+			if (radius_msg_add_attr_to_array(
 | 
				
			||||||
 | 
					+				    msg, (struct radius_attr_hdr *) ext))
 | 
				
			||||||
 | 
					+				return NULL;
 | 
				
			||||||
 | 
					+		} while (data_len > 0);
 | 
				
			||||||
 | 
					+	} else if (radius_is_ext_type(type)) {
 | 
				
			||||||
 | 
					+		ext = wpabuf_put(msg->buf, sizeof(struct radius_attr_hdr_ext));
 | 
				
			||||||
 | 
					+		attr = (struct radius_attr_hdr *) ext;
 | 
				
			||||||
 | 
					+		ext->type = type;
 | 
				
			||||||
 | 
					+		ext->length = sizeof(*ext) + data_len;
 | 
				
			||||||
 | 
					+		ext->ext_type = ext_type;
 | 
				
			||||||
 | 
					+		wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					+		if (radius_msg_add_attr_to_array(msg, attr))
 | 
				
			||||||
 | 
					+			return NULL;
 | 
				
			||||||
 | 
					+	} else {
 | 
				
			||||||
 | 
					+		attr = wpabuf_put(msg->buf, sizeof(struct radius_attr_hdr));
 | 
				
			||||||
 | 
					+		attr->type = type;
 | 
				
			||||||
 | 
					+		attr->length = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					+		wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					+		if (radius_msg_add_attr_to_array(msg, attr))
 | 
				
			||||||
 | 
					+			return NULL;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	return attr;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					@@ -1285,6 +1406,28 @@ int radius_msg_add_wfa(struct radius_msg *msg, u8 subtype, const u8 *data,
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+int radius_msg_add_ext_vs(struct radius_msg *msg, u16 type, u32 vendor_id,
 | 
				
			||||||
 | 
					+			  u8 vendor_type, const u8 *data, size_t len)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	struct radius_attr_hdr *attr;
 | 
				
			||||||
 | 
					+	u8 *buf, *pos;
 | 
				
			||||||
 | 
					+	size_t alen;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	alen = 4 + 1 + len;
 | 
				
			||||||
 | 
					+	buf = os_malloc(alen);
 | 
				
			||||||
 | 
					+	if (!buf)
 | 
				
			||||||
 | 
					+		return 0;
 | 
				
			||||||
 | 
					+	pos = buf;
 | 
				
			||||||
 | 
					+	WPA_PUT_BE32(pos, vendor_id);
 | 
				
			||||||
 | 
					+	pos += 4;
 | 
				
			||||||
 | 
					+	*pos++ = vendor_type;
 | 
				
			||||||
 | 
					+	os_memcpy(pos, data, len);
 | 
				
			||||||
 | 
					+	attr = radius_msg_add_attr(msg, type, buf, alen);
 | 
				
			||||||
 | 
					+	os_free(buf);
 | 
				
			||||||
 | 
					+	return attr != NULL;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 int radius_user_password_hide(struct radius_msg *msg,
 | 
				
			||||||
 | 
					 			      const u8 *data, size_t data_len,
 | 
				
			||||||
 | 
					 			      const u8 *secret, size_t secret_len,
 | 
				
			||||||
 | 
					diff --git a/src/radius/radius.h b/src/radius/radius.h
 | 
				
			||||||
 | 
					index fb8148180..490c8d1f6 100644
 | 
				
			||||||
 | 
					--- a/src/radius/radius.h
 | 
				
			||||||
 | 
					+++ b/src/radius/radius.h
 | 
				
			||||||
 | 
					@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * RADIUS message processing
 | 
				
			||||||
 | 
					- * Copyright (c) 2002-2009, 2012, 2014-2015, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+ * Copyright (c) 2002-2009, 2012, 2014-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					  *
 | 
				
			||||||
 | 
					  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					  * See README for more details.
 | 
				
			||||||
 | 
					@@ -46,7 +46,15 @@ struct radius_attr_hdr {
 | 
				
			||||||
 | 
					 	/* followed by length-2 octets of attribute value */
 | 
				
			||||||
 | 
					 } STRUCT_PACKED;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+struct radius_attr_hdr_ext {
 | 
				
			||||||
 | 
					+	u8 type;
 | 
				
			||||||
 | 
					+	u8 length; /* including this header */
 | 
				
			||||||
 | 
					+	u8 ext_type;
 | 
				
			||||||
 | 
					+	/* followed by length-3 octets of attribute value */
 | 
				
			||||||
 | 
					+} STRUCT_PACKED;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 #define RADIUS_MAX_ATTR_LEN (255 - sizeof(struct radius_attr_hdr))
 | 
				
			||||||
 | 
					+#define RADIUS_MAX_EXT_ATTR_LEN (255 - sizeof(struct radius_attr_hdr_ext))
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 enum { RADIUS_ATTR_USER_NAME = 1,
 | 
				
			||||||
 | 
					        RADIUS_ATTR_USER_PASSWORD = 2,
 | 
				
			||||||
 | 
					@@ -113,6 +121,18 @@ enum { RADIUS_ATTR_USER_NAME = 1,
 | 
				
			||||||
 | 
					        RADIUS_ATTR_WLAN_GROUP_CIPHER = 187,
 | 
				
			||||||
 | 
					        RADIUS_ATTR_WLAN_AKM_SUITE = 188,
 | 
				
			||||||
 | 
					        RADIUS_ATTR_WLAN_GROUP_MGMT_CIPHER = 189,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_TYPE_1 = 241,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_TYPE_2 = 242,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_TYPE_3 = 243,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_TYPE_4 = 244,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_LONG_EXT_TYPE_1 = 245,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_LONG_EXT_TYPE_2 = 246,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_1 = (241 << 8) | 26,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_2 = (242 << 8) | 26,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_3 = (243 << 8) | 26,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_4 = (244 << 8) | 26,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5 = (245 << 8) | 26,
 | 
				
			||||||
 | 
					+       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_6 = (246 << 8) | 26,
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -257,7 +277,7 @@ int radius_msg_verify_acct_req(struct radius_msg *msg, const u8 *secret,
 | 
				
			||||||
 | 
					 int radius_msg_verify_das_req(struct radius_msg *msg, const u8 *secret,
 | 
				
			||||||
 | 
					 			      size_t secret_len,
 | 
				
			||||||
 | 
					 			      int require_message_authenticator);
 | 
				
			||||||
 | 
					-struct radius_attr_hdr * radius_msg_add_attr(struct radius_msg *msg, u8 type,
 | 
				
			||||||
 | 
					+struct radius_attr_hdr * radius_msg_add_attr(struct radius_msg *msg, u16 type,
 | 
				
			||||||
 | 
					 					     const u8 *data, size_t data_len);
 | 
				
			||||||
 | 
					 struct radius_msg * radius_msg_parse(const u8 *data, size_t len);
 | 
				
			||||||
 | 
					 int radius_msg_add_eap(struct radius_msg *msg, const u8 *data,
 | 
				
			||||||
 | 
					@@ -284,6 +304,8 @@ int radius_msg_add_mppe_keys(struct radius_msg *msg,
 | 
				
			||||||
 | 
					 			     const u8 *recv_key, size_t recv_key_len);
 | 
				
			||||||
 | 
					 int radius_msg_add_wfa(struct radius_msg *msg, u8 subtype, const u8 *data,
 | 
				
			||||||
 | 
					 		       size_t len);
 | 
				
			||||||
 | 
					+int radius_msg_add_ext_vs(struct radius_msg *msg, u16 type, u32 vendor_id,
 | 
				
			||||||
 | 
					+			  u8 vendor_type, const u8 *data, size_t len);
 | 
				
			||||||
 | 
					 int radius_user_password_hide(struct radius_msg *msg,
 | 
				
			||||||
 | 
					 			      const u8 *data, size_t data_len,
 | 
				
			||||||
 | 
					 			      const u8 *secret, size_t secret_len,
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,102 @@
 | 
				
			|||||||
 | 
					From b94371af8402f60218716552e571ca72cff4e3c0 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					Date: Fri, 15 Apr 2022 17:36:25 +0300
 | 
				
			||||||
 | 
					Subject: [PATCH] RADIUS attributes for EAPOL-Key message details
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use vendor specific RADIUS attributes for sending ANonce and EAPOL-Key
 | 
				
			||||||
 | 
					msg 2/4 for the wpa_psk_radius=3 case. The vendor specific attributes
 | 
				
			||||||
 | 
					for this are defined in FreeRADIUS as follows:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN-VENDOR    FreeRADIUS      format=Extended-Vendor-Specific-5
 | 
				
			||||||
 | 
					ATTRIBUTE       FreeRADIUS-802.1X-Anonce        1       octets[32]
 | 
				
			||||||
 | 
					ATTRIBUTE       FreeRADIUS-802.1X-EAPoL-Key-Msg 2       octets
 | 
				
			||||||
 | 
					END-VENDOR      FreeRADIUS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 src/ap/ieee802_11_auth.c | 29 +++++++++++++++++++++++++++++
 | 
				
			||||||
 | 
					 src/radius/radius.h      |  7 +++++++
 | 
				
			||||||
 | 
					 2 files changed, 36 insertions(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/src/ap/ieee802_11_auth.c b/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					index a54d7616e..4277d82cb 100644
 | 
				
			||||||
 | 
					--- a/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					+++ b/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					@@ -47,6 +47,9 @@ struct hostapd_acl_query_data {
 | 
				
			||||||
 | 
					 	struct hostapd_acl_query_data *next;
 | 
				
			||||||
 | 
					 	bool radius_psk;
 | 
				
			||||||
 | 
					 	int akm;
 | 
				
			||||||
 | 
					+	u8 *anonce;
 | 
				
			||||||
 | 
					+	u8 *eapol;
 | 
				
			||||||
 | 
					+	size_t eapol_len;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -102,6 +105,8 @@ static void hostapd_acl_query_free(struct hostapd_acl_query_data *query)
 | 
				
			||||||
 | 
					 	if (!query)
 | 
				
			||||||
 | 
					 		return;
 | 
				
			||||||
 | 
					 	os_free(query->auth_msg);
 | 
				
			||||||
 | 
					+	os_free(query->anonce);
 | 
				
			||||||
 | 
					+	os_free(query->eapol);
 | 
				
			||||||
 | 
					 	os_free(query);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -164,6 +169,24 @@ static int hostapd_radius_acl_query(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					 		goto fail;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (query->anonce &&
 | 
				
			||||||
 | 
					+	    !radius_msg_add_ext_vs(msg, RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5,
 | 
				
			||||||
 | 
					+				   RADIUS_VENDOR_ID_FREERADIUS,
 | 
				
			||||||
 | 
					+				   RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_ANONCE,
 | 
				
			||||||
 | 
					+				   query->anonce, WPA_NONCE_LEN)) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "Could not add FreeRADIUS-802.1X-Anonce");
 | 
				
			||||||
 | 
					+		goto fail;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (query->eapol &&
 | 
				
			||||||
 | 
					+	    !radius_msg_add_ext_vs(msg, RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5,
 | 
				
			||||||
 | 
					+				   RADIUS_VENDOR_ID_FREERADIUS,
 | 
				
			||||||
 | 
					+				   RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_EAPOL_KEY_MSG,
 | 
				
			||||||
 | 
					+				   query->eapol, query->eapol_len)) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "Could not add FreeRADIUS-802.1X-EAPoL-Key-Msg");
 | 
				
			||||||
 | 
					+		goto fail;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, addr) < 0)
 | 
				
			||||||
 | 
					 		goto fail;
 | 
				
			||||||
 | 
					 	return 0;
 | 
				
			||||||
 | 
					@@ -703,6 +726,12 @@ void hostapd_acl_req_radius_psk(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					 	query->akm = key_mgmt;
 | 
				
			||||||
 | 
					 	os_get_reltime(&query->timestamp);
 | 
				
			||||||
 | 
					 	os_memcpy(query->addr, addr, ETH_ALEN);
 | 
				
			||||||
 | 
					+	if (anonce)
 | 
				
			||||||
 | 
					+		query->anonce = os_memdup(anonce, WPA_NONCE_LEN);
 | 
				
			||||||
 | 
					+	if (eapol) {
 | 
				
			||||||
 | 
					+		query->eapol = os_memdup(eapol, eapol_len);
 | 
				
			||||||
 | 
					+		query->eapol_len = eapol_len;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					 	if (hostapd_radius_acl_query(hapd, addr, query)) {
 | 
				
			||||||
 | 
					 		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					 			   "Failed to send Access-Request for RADIUS PSK/ACL query");
 | 
				
			||||||
 | 
					diff --git a/src/radius/radius.h b/src/radius/radius.h
 | 
				
			||||||
 | 
					index 490c8d1f6..177c64a66 100644
 | 
				
			||||||
 | 
					--- a/src/radius/radius.h
 | 
				
			||||||
 | 
					+++ b/src/radius/radius.h
 | 
				
			||||||
 | 
					@@ -208,6 +208,13 @@ enum { RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY = 16,
 | 
				
			||||||
 | 
					        RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY = 17
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+/* FreeRADIUS vendor-specific attributes */
 | 
				
			||||||
 | 
					+#define RADIUS_VENDOR_ID_FREERADIUS 11344
 | 
				
			||||||
 | 
					+/* Extended-Vendor-Specific-5 (245.26; long extended header) */
 | 
				
			||||||
 | 
					+enum {
 | 
				
			||||||
 | 
					+	RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_ANONCE = 1,
 | 
				
			||||||
 | 
					+	RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_EAPOL_KEY_MSG = 2,
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /* Hotspot 2.0 - WFA Vendor-specific RADIUS Attributes */
 | 
				
			||||||
 | 
					 #define RADIUS_VENDOR_ID_WFA 40808
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -179,11 +179,12 @@ config-$(call config_package,mac80211-hwsim) += MAC80211_HWSIM
 | 
				
			|||||||
MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \
 | 
					MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \
 | 
				
			||||||
	CROSS_COMPILE="$(KERNEL_CROSS)" \
 | 
						CROSS_COMPILE="$(KERNEL_CROSS)" \
 | 
				
			||||||
        ARCH="$(LINUX_KARCH)" \
 | 
					        ARCH="$(LINUX_KARCH)" \
 | 
				
			||||||
	EXTRA_CFLAGS="-I$(PKG_BUILD_DIR)/include $(IREMAP_CFLAGS) -I$(STAGING_DIR)/usr/include/qca-nss-drv -I$(STAGING_DIR)/usr/include/qca-nss-clients" \
 | 
						EXTRA_CFLAGS="-I$(PKG_BUILD_DIR)/include $(IREMAP_CFLAGS) -I$(STAGING_DIR)/usr/include/qca-nss-drv -I$(STAGING_DIR)/usr/include/qca-nss-clients -Wno-incompatible-pointer-types -Wno-discarded-qualifiers -Wno-int-conversion -Wno-unused-function -Wno-implicit-fallthrough" \
 | 
				
			||||||
	KLIB_BUILD="$(LINUX_DIR)" \
 | 
						KLIB_BUILD="$(LINUX_DIR)" \
 | 
				
			||||||
	MODPROBE=true \
 | 
						MODPROBE=true \
 | 
				
			||||||
	KLIB=$(TARGET_MODULES_DIR) \
 | 
						KLIB=$(TARGET_MODULES_DIR) \
 | 
				
			||||||
	KERNEL_SUBLEVEL=$(lastword $(subst ., ,$(KERNEL_PATCHVER))) \
 | 
						KERNEL_SUBLEVEL=$(lastword $(subst ., ,$(KERNEL_PATCHVER))) \
 | 
				
			||||||
 | 
						KBUILD_MODPOST_WARN=1 \
 | 
				
			||||||
	KBUILD_LDFLAGS_MODULE_PREREQ=
 | 
						KBUILD_LDFLAGS_MODULE_PREREQ=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define ConfigVars
 | 
					define ConfigVars
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,6 +84,8 @@ drv_mac80211_init_iface_config() {
 | 
				
			|||||||
	config_add_int dtim_period
 | 
						config_add_int dtim_period
 | 
				
			||||||
	config_add_int start_disabled
 | 
						config_add_int start_disabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config_add_int fils_discovery_max_interval
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# mesh
 | 
						# mesh
 | 
				
			||||||
	config_add_string mesh_id
 | 
						config_add_string mesh_id
 | 
				
			||||||
	config_add_int $MP_CONFIG_INT
 | 
						config_add_int $MP_CONFIG_INT
 | 
				
			||||||
@@ -488,9 +490,11 @@ mac80211_hostapd_setup_bss() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	hostapd_set_bss_options hostapd_cfg "$phy" "$vif" || return 1
 | 
						hostapd_set_bss_options hostapd_cfg "$phy" "$vif" || return 1
 | 
				
			||||||
	json_get_vars wds wds_bridge dtim_period max_listen_int start_disabled
 | 
						json_get_vars wds wds_bridge dtim_period max_listen_int start_disabled
 | 
				
			||||||
 | 
					        json_get_vars fils_discovery_max_interval
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_default wds 0
 | 
						set_default wds 0
 | 
				
			||||||
	set_default start_disabled 0
 | 
						set_default start_disabled 0
 | 
				
			||||||
 | 
						set_default fils_discovery_max_interval 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	[ "$wds" -gt 0 ] && {
 | 
						[ "$wds" -gt 0 ] && {
 | 
				
			||||||
		append hostapd_cfg "wds_sta=1" "$N"
 | 
							append hostapd_cfg "wds_sta=1" "$N"
 | 
				
			||||||
@@ -498,6 +502,14 @@ mac80211_hostapd_setup_bss() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	[ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
 | 
						[ "$staidx" -gt 0 -o "$start_disabled" -eq 1 ] && append hostapd_cfg "start_disabled=1" "$N"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[ "$band" = "6g" ] && {
 | 
				
			||||||
 | 
							if [ "$fils_discovery_max_interval" -gt 0 ] && [ "$fils_discovery_max_interval" -le 20 ]; then
 | 
				
			||||||
 | 
								append hostapd_cfg "fils_discovery_max_interval=$fils_discovery_max_interval" "$N"
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								append hostapd_cfg "fils_discovery_max_interval=20" "$N"
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cat >> /var/run/hostapd-$phy.conf <<EOF
 | 
						cat >> /var/run/hostapd-$phy.conf <<EOF
 | 
				
			||||||
$hostapd_cfg
 | 
					$hostapd_cfg
 | 
				
			||||||
bssid=$macaddr
 | 
					bssid=$macaddr
 | 
				
			||||||
@@ -718,6 +730,7 @@ mac80211_prepare_vif() {
 | 
				
			|||||||
			[ "$wds" -gt 0 ] && wdsflag="4addr on"
 | 
								[ "$wds" -gt 0 ] && wdsflag="4addr on"
 | 
				
			||||||
			mac80211_iw_interface_add "$phy" "$ifname" managed "$wdsflag" || return
 | 
								mac80211_iw_interface_add "$phy" "$ifname" managed "$wdsflag" || return
 | 
				
			||||||
			if [ "$wds" -gt 0 ]; then
 | 
								if [ "$wds" -gt 0 ]; then
 | 
				
			||||||
 | 
									echo 1 > /sys/kernel/debug/ieee80211/$phy/netdev\:$ifname/disable_offload
 | 
				
			||||||
				iw "$ifname" set 4addr on
 | 
									iw "$ifname" set 4addr on
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				iw "$ifname" set 4addr off
 | 
									iw "$ifname" set 4addr off
 | 
				
			||||||
@@ -1050,6 +1063,8 @@ drv_mac80211_setup() {
 | 
				
			|||||||
		return 1
 | 
							return 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						[ "$band" = "6g" ] && multiple_bssid=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wireless_set_data phy="$phy"
 | 
						wireless_set_data phy="$phy"
 | 
				
			||||||
	[ -z "$(uci -q -P /var/state show wireless._${phy})" ] && uci -q -P /var/state set wireless._${phy}=phy
 | 
						[ -z "$(uci -q -P /var/state show wireless._${phy})" ] && uci -q -P /var/state set wireless._${phy}=phy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
From bb797fc82f8ade2a1c0b7a68dd7c920eae2f531f Mon Sep 17 00:00:00 2001
 | 
					From 4b7a8429c654dc7a3fc96c0042592793a09f667a Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: John Crispin <john@phrozen.org>
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
Date: Tue, 18 May 2021 10:46:43 +0200
 | 
					Date: Tue, 18 May 2021 10:46:43 +0200
 | 
				
			||||||
Subject: [PATCH 01/74] libubox: update to latest HEAD
 | 
					Subject: [PATCH 2/4] libubox: update to latest HEAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: John Crispin <john@phrozen.org>
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
@@ -9,7 +9,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			|||||||
 1 file changed, 4 insertions(+), 4 deletions(-)
 | 
					 1 file changed, 4 insertions(+), 4 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/package/libs/libubox/Makefile b/package/libs/libubox/Makefile
 | 
					diff --git a/package/libs/libubox/Makefile b/package/libs/libubox/Makefile
 | 
				
			||||||
index d2c07783e1..3b01930d6c 100644
 | 
					index d2c07783e1..c112b49d0f 100644
 | 
				
			||||||
--- a/package/libs/libubox/Makefile
 | 
					--- a/package/libs/libubox/Makefile
 | 
				
			||||||
+++ b/package/libs/libubox/Makefile
 | 
					+++ b/package/libs/libubox/Makefile
 | 
				
			||||||
@@ -5,9 +5,9 @@ PKG_RELEASE=2
 | 
					@@ -5,9 +5,9 @@ PKG_RELEASE=2
 | 
				
			||||||
@@ -19,9 +19,9 @@ index d2c07783e1..3b01930d6c 100644
 | 
				
			|||||||
-PKG_MIRROR_HASH:=7dd1db1e0074a9c7c722db654cce3111b3bd3cff0bfd791c4497cb0f6c22d3ca
 | 
					-PKG_MIRROR_HASH:=7dd1db1e0074a9c7c722db654cce3111b3bd3cff0bfd791c4497cb0f6c22d3ca
 | 
				
			||||||
-PKG_SOURCE_DATE:=2021-05-16
 | 
					-PKG_SOURCE_DATE:=2021-05-16
 | 
				
			||||||
-PKG_SOURCE_VERSION:=b14c4688612c05c78ce984d7bde633bce8703b1e
 | 
					-PKG_SOURCE_VERSION:=b14c4688612c05c78ce984d7bde633bce8703b1e
 | 
				
			||||||
+PKG_MIRROR_HASH:=82d84fb97e725b0a18ceac639cae0c17d922754bb648ff58c62069d92798a6cd
 | 
					+PKG_MIRROR_HASH:=cf48d00ed0ea74d53f2043eb9f9dc52834c0b214f258201cf22dfff7dd6c6e40
 | 
				
			||||||
+PKG_SOURCE_DATE:=2021-08-19
 | 
					+PKG_SOURCE_DATE:=2022-05-15
 | 
				
			||||||
+PKG_SOURCE_VERSION:=c86a894ec63d83ecf2c373bbf9dc8fba9713d942
 | 
					+PKG_SOURCE_VERSION:=d2223ef9da7172a84d1508733dc58840e1381e3c
 | 
				
			||||||
 PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE))
 | 
					 PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE))
 | 
				
			||||||
 CMAKE_INSTALL:=1
 | 
					 CMAKE_INSTALL:=1
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,22 +1,31 @@
 | 
				
			|||||||
From 23f5618453b232b9ebc5b61b7a560cd4abc09957 Mon Sep 17 00:00:00 2001
 | 
					From f7aad67ef1f61a15fb09d927e331b46f6cafb44e Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: John Crispin <john@phrozen.org>
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
Date: Thu, 27 May 2021 13:24:47 +0200
 | 
					Date: Thu, 27 May 2021 13:24:47 +0200
 | 
				
			||||||
Subject: [PATCH] netifd: update to latest HEAD
 | 
					Subject: [PATCH 3/4] netifd: update to latest HEAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: John Crispin <john@phrozen.org>
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 package/network/config/netifd/Makefile        |  2 -
 | 
					 package/network/config/netifd/Makefile        |  8 +++----
 | 
				
			||||||
 .../config/netifd/patches/100-script.patch    | 21 +++++++++++
 | 
					 .../config/netifd/patches/100-script.patch    | 21 +++++++++++++++++++
 | 
				
			||||||
 .../config/netifd/patches/hairpin.patch       | 37 +++++++++++++++++++
 | 
					 2 files changed, 24 insertions(+), 5 deletions(-)
 | 
				
			||||||
 3 files changed, 58 insertions(+), 2 deletions(-)
 | 
					 | 
				
			||||||
 create mode 100644 package/network/config/netifd/patches/100-script.patch
 | 
					 create mode 100644 package/network/config/netifd/patches/100-script.patch
 | 
				
			||||||
 create mode 100644 package/network/config/netifd/patches/hairpin.patch
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile
 | 
					diff --git a/package/network/config/netifd/Makefile b/package/network/config/netifd/Makefile
 | 
				
			||||||
index cd4f8f423d..e4399b2473 100644
 | 
					index cd4f8f423d..c0a053cd4f 100644
 | 
				
			||||||
--- a/package/network/config/netifd/Makefile
 | 
					--- a/package/network/config/netifd/Makefile
 | 
				
			||||||
+++ b/package/network/config/netifd/Makefile
 | 
					+++ b/package/network/config/netifd/Makefile
 | 
				
			||||||
@@ -13,8 +13,6 @@ PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 | 
					@@ -5,16 +5,14 @@ PKG_RELEASE:=1
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 PKG_SOURCE_PROTO:=git
 | 
				
			||||||
 | 
					 PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git
 | 
				
			||||||
 | 
					-PKG_SOURCE_DATE:=2021-10-30
 | 
				
			||||||
 | 
					-PKG_SOURCE_VERSION:=8f82742ca4f47f459284f3a07323d04da72ea5f6
 | 
				
			||||||
 | 
					-PKG_MIRROR_HASH:=5e519bb1aec9bb30782213f32f19f12e874c909e42826618dd4332ded816d2fe
 | 
				
			||||||
 | 
					+PKG_SOURCE_DATE:=2022-05-19
 | 
				
			||||||
 | 
					+PKG_SOURCE_VERSION:=507c0513d1766757d969530c51fe7d368354538d
 | 
				
			||||||
 | 
					+PKG_MIRROR_HASH:=706ede2ffd787a1f5388f2e80300e8f559a704dda21ebc05356074765593539c
 | 
				
			||||||
 | 
					 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 PKG_LICENSE:=GPL-2.0
 | 
					 PKG_LICENSE:=GPL-2.0
 | 
				
			||||||
 PKG_LICENSE_FILES:=
 | 
					 PKG_LICENSE_FILES:=
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					From bd346c1fa7f205b10f1aa8f1f4e4e89c3a80c13d Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Thu, 26 May 2022 09:01:48 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 1/4] libnl-tiny: update to latest HEAD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 package/libs/libnl-tiny/Makefile | 10 +++++-----
 | 
				
			||||||
 | 
					 1 file changed, 5 insertions(+), 5 deletions(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/libs/libnl-tiny/Makefile b/package/libs/libnl-tiny/Makefile
 | 
				
			||||||
 | 
					index bdb496c48e..48df6a4c8c 100644
 | 
				
			||||||
 | 
					--- a/package/libs/libnl-tiny/Makefile
 | 
				
			||||||
 | 
					+++ b/package/libs/libnl-tiny/Makefile
 | 
				
			||||||
 | 
					@@ -8,13 +8,13 @@
 | 
				
			||||||
 | 
					 include $(TOPDIR)/rules.mk
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 PKG_NAME:=libnl-tiny
 | 
				
			||||||
 | 
					-PKG_RELEASE:=2
 | 
				
			||||||
 | 
					+PKG_RELEASE:=1
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 PKG_SOURCE_PROTO:=git
 | 
				
			||||||
 | 
					 PKG_SOURCE_URL=$(PROJECT_GIT)/project/libnl-tiny.git
 | 
				
			||||||
 | 
					-PKG_SOURCE_DATE:=2020-08-05
 | 
				
			||||||
 | 
					-PKG_SOURCE_VERSION:=c291088f631d1694f7ba0444b59677b194348da8
 | 
				
			||||||
 | 
					-PKG_MIRROR_HASH:=99bcce12701bb34dadb39689d95c2c5cf1e27719d0ecfd645d3957a8947025ac
 | 
				
			||||||
 | 
					+PKG_SOURCE_DATE:=2022-05-17
 | 
				
			||||||
 | 
					+PKG_SOURCE_VERSION:=b5b2ba09c4f1c8b3c21580aea7223edc2f5e92be
 | 
				
			||||||
 | 
					+PKG_MIRROR_HASH:=b957d56aa8c2e7b55184111be69eb8dea734f1feba19e670a91f302459a48a78
 | 
				
			||||||
 | 
					 CMAKE_INSTALL:=1
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 PKG_LICENSE:=LGPL-2.1
 | 
				
			||||||
 | 
					@@ -27,7 +27,7 @@ define Package/libnl-tiny
 | 
				
			||||||
 | 
					   SECTION:=libs
 | 
				
			||||||
 | 
					   CATEGORY:=Libraries
 | 
				
			||||||
 | 
					   TITLE:=netlink socket library
 | 
				
			||||||
 | 
					-  ABI_VERSION:=1
 | 
				
			||||||
 | 
					+  ABI_VERSION:=$(PKG_SOURCE_DATE)
 | 
				
			||||||
 | 
					 endef
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 define Package/libnl-tiny/description
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					From 9bede53698b963280df8b7c3c85c052e66e9d548 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Thu, 17 Feb 2022 08:27:09 +0100
 | 
				
			||||||
 | 
					Subject: [PATCH] net: bridge: clear bridge's private skb space on xmit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We need to clear all of the bridge private skb variables as they can be
 | 
				
			||||||
 | 
					stale due to the packet being recirculated through the stack and then
 | 
				
			||||||
 | 
					transmitted through the bridge device. Similar memset is already done on
 | 
				
			||||||
 | 
					bridge's input. We've seen cases where proxyarp_replied was 1 on routed
 | 
				
			||||||
 | 
					multicast packets transmitted through the bridge to ports with neigh
 | 
				
			||||||
 | 
					suppress which were getting dropped. Same thing can in theory happen with
 | 
				
			||||||
 | 
					the port isolation bit as well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fixes: 821f1b21cabb ("bridge: add new BR_NEIGH_SUPPRESS port flag to suppress arp and nd flood")
 | 
				
			||||||
 | 
					Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
 | 
				
			||||||
 | 
					Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 ...r-bridge-s-private-skb-space-on-xmit.patch | 36 +++++++++++++++++++
 | 
				
			||||||
 | 
					 1 file changed, 36 insertions(+)
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/generic/backport-5.4/999-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/target/linux/generic/backport-5.4/999-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch b/target/linux/generic/backport-5.4/999-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..20f71569da
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/generic/backport-5.4/999-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					+From fd65e5a95d08389444e8591a20538b3edece0e15 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					+From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
 | 
				
			||||||
 | 
					+Date: Fri, 31 Jul 2020 19:26:16 +0300
 | 
				
			||||||
 | 
					+Subject: [PATCH] net: bridge: clear bridge's private skb space on xmit
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+We need to clear all of the bridge private skb variables as they can be
 | 
				
			||||||
 | 
					+stale due to the packet being recirculated through the stack and then
 | 
				
			||||||
 | 
					+transmitted through the bridge device. Similar memset is already done on
 | 
				
			||||||
 | 
					+bridge's input. We've seen cases where proxyarp_replied was 1 on routed
 | 
				
			||||||
 | 
					+multicast packets transmitted through the bridge to ports with neigh
 | 
				
			||||||
 | 
					+suppress which were getting dropped. Same thing can in theory happen with
 | 
				
			||||||
 | 
					+the port isolation bit as well.
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Fixes: 821f1b21cabb ("bridge: add new BR_NEIGH_SUPPRESS port flag to suppress arp and nd flood")
 | 
				
			||||||
 | 
					+Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
 | 
				
			||||||
 | 
					+Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			||||||
 | 
					+---
 | 
				
			||||||
 | 
					+ net/bridge/br_device.c | 2 ++
 | 
				
			||||||
 | 
					+ 1 file changed, 2 insertions(+)
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
 | 
				
			||||||
 | 
					+index 8c7b78f8bc23..9a2fb4aa1a10 100644
 | 
				
			||||||
 | 
					+--- a/net/bridge/br_device.c
 | 
				
			||||||
 | 
					++++ b/net/bridge/br_device.c
 | 
				
			||||||
 | 
					+@@ -36,6 +36,8 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
				
			||||||
 | 
					+ 	const unsigned char *dest;
 | 
				
			||||||
 | 
					+ 	u16 vid = 0;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++	memset(skb->cb, 0, sizeof(struct br_input_skb_cb));
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ 	rcu_read_lock();
 | 
				
			||||||
 | 
					+ 	nf_ops = rcu_dereference(nf_br_ops);
 | 
				
			||||||
 | 
					+ 	if (nf_ops && nf_ops->br_dev_xmit_hook(skb)) {
 | 
				
			||||||
 | 
					+-- 
 | 
				
			||||||
 | 
					+2.25.1
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					From aed33811a7780131e72bf14a616579bee46ce5ae Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Tue, 3 May 2022 07:42:32 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] bpf.mk: backport a fix that unbreaks bpf compile on armv7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 include/bpf.mk | 2 +-
 | 
				
			||||||
 | 
					 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/include/bpf.mk b/include/bpf.mk
 | 
				
			||||||
 | 
					index 2f797625b6..d8164436a4 100644
 | 
				
			||||||
 | 
					--- a/include/bpf.mk
 | 
				
			||||||
 | 
					+++ b/include/bpf.mk
 | 
				
			||||||
 | 
					@@ -66,7 +66,7 @@ define CompileBPF
 | 
				
			||||||
 | 
					 	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(STAGING_DIR_HOST)/lib \
 | 
				
			||||||
 | 
					 	$(LLVM_DIS) < $(patsubst %.c,%.opt,$(1)) > $(patsubst %.c,%.S,$(1))
 | 
				
			||||||
 | 
					 	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(STAGING_DIR_HOST)/lib \
 | 
				
			||||||
 | 
					-	$(LLVM_LLC) -march=$(BPF_TARGET) -filetype=obj -o $(patsubst %.c,%.o,$(1)) < $(patsubst %.c,%.S,$(1))
 | 
				
			||||||
 | 
					+	$(LLVM_LLC) -march=$(BPF_TARGET) -mcpu=v3 -filetype=obj -o $(patsubst %.c,%.o,$(1)) < $(patsubst %.c,%.S,$(1))
 | 
				
			||||||
 | 
					 	LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(STAGING_DIR_HOST)/lib \
 | 
				
			||||||
 | 
					 	$(LLVM_STRIP) --strip-debug $(patsubst %.c,%.o,$(1))
 | 
				
			||||||
 | 
					 endef
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										33
									
								
								patches/base/0022-iwinfo-add-6E-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								patches/base/0022-iwinfo-add-6E-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					From f057826fed0208c369ca9483092c706bf5c9ae9e Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Thu, 12 May 2022 09:31:11 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] iwinfo: add 6E support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 package/network/utils/iwinfo/patches/100-6g.patch | 13 +++++++++++++
 | 
				
			||||||
 | 
					 1 file changed, 13 insertions(+)
 | 
				
			||||||
 | 
					 create mode 100644 package/network/utils/iwinfo/patches/100-6g.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/network/utils/iwinfo/patches/100-6g.patch b/package/network/utils/iwinfo/patches/100-6g.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..45472e8ccf
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/package/network/utils/iwinfo/patches/100-6g.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					+Index: libiwinfo-2021-06-09-c0414642/iwinfo_nl80211.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- libiwinfo-2021-06-09-c0414642.orig/iwinfo_nl80211.c
 | 
				
			||||||
 | 
					++++ libiwinfo-2021-06-09-c0414642/iwinfo_nl80211.c
 | 
				
			||||||
 | 
					+@@ -642,6 +642,8 @@ static int nl80211_freq2channel(int freq
 | 
				
			||||||
 | 
					+ 		return (freq - 4000) / 5;
 | 
				
			||||||
 | 
					+ 	else if(freq >= 56160 + 2160 * 1 && freq <= 56160 + 2160 * 6)
 | 
				
			||||||
 | 
					+ 		return (freq - 56160) / 2160;
 | 
				
			||||||
 | 
					++	else if (freq >= 5955 && freq <= 7115)
 | 
				
			||||||
 | 
					++		return (freq - 5950) / 5;
 | 
				
			||||||
 | 
					+ 	else
 | 
				
			||||||
 | 
					+ 		return (freq - 5000) / 5;
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
From 7244d33107173856db10bb2084146137704e7e18 Mon Sep 17 00:00:00 2001
 | 
					From abd52a80294b6752cc66432041e91ca11944366e Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: John Crispin <john@phrozen.org>
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
Date: Sat, 4 Sep 2021 05:56:53 +0200
 | 
					Date: Sat, 4 Sep 2021 05:56:53 +0200
 | 
				
			||||||
Subject: [PATCH 28/43] ipq4019: add CIG wf610d
 | 
					Subject: [PATCH 01/33] ipq4019: add CIG wf610d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: John Crispin <john@phrozen.org>
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
@@ -11,10 +11,10 @@ Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			|||||||
 .../ipq40xx/base-files/etc/board.d/02_network |   1 +
 | 
					 .../ipq40xx/base-files/etc/board.d/02_network |   1 +
 | 
				
			||||||
 .../etc/hotplug.d/firmware/11-ath10k-caldata  |   8 +
 | 
					 .../etc/hotplug.d/firmware/11-ath10k-caldata  |   8 +
 | 
				
			||||||
 .../lib/preinit/05_set_iface_mac_ipq40xx.sh   |   4 +
 | 
					 .../lib/preinit/05_set_iface_mac_ipq40xx.sh   |   4 +
 | 
				
			||||||
 .../boot/dts/qcom-ipq4029-ap-cig-wf610d.dts   | 409 ++++++++++++++++++
 | 
					 .../boot/dts/qcom-ipq4029-ap-cig-wf610d.dts   | 414 ++++++++++++++++++
 | 
				
			||||||
 target/linux/ipq40xx/image/generic.mk         |  14 +
 | 
					 target/linux/ipq40xx/image/generic.mk         |  14 +
 | 
				
			||||||
 .../901-arm-boot-add-dts-files.patch          |   3 +-
 | 
					 .../901-arm-boot-add-dts-files.patch          |   3 +-
 | 
				
			||||||
 9 files changed, 444 insertions(+), 2 deletions(-)
 | 
					 9 files changed, 449 insertions(+), 2 deletions(-)
 | 
				
			||||||
 create mode 100644 package/firmware/ipq-wifi/board-cig_wf610d.qca4019
 | 
					 create mode 100644 package/firmware/ipq-wifi/board-cig_wf610d.qca4019
 | 
				
			||||||
 create mode 100755 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts
 | 
					 create mode 100755 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -133,7 +133,7 @@ index 1d4c78833a..d62a2e5061 100755
 | 
				
			|||||||
 	edgecore,oap100|\
 | 
					 	edgecore,oap100|\
 | 
				
			||||||
 	openmesh,a42|\
 | 
					 	openmesh,a42|\
 | 
				
			||||||
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
					diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
index b7ee73b12e..3948c08984 100644
 | 
					index b12c9af9a7..4a3f18579c 100644
 | 
				
			||||||
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
					--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
					+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
@@ -93,6 +93,10 @@ case "$FIRMWARE" in
 | 
					@@ -93,6 +93,10 @@ case "$FIRMWARE" in
 | 
				
			||||||
@@ -175,10 +175,10 @@ index 0d606c75b5..4d3b1df219 100644
 | 
				
			|||||||
 		ip link set dev eth1 address $(mtd_get_mac_binary "ART" 0x0)
 | 
					 		ip link set dev eth1 address $(mtd_get_mac_binary "ART" 0x0)
 | 
				
			||||||
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts
 | 
					diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts
 | 
				
			||||||
new file mode 100755
 | 
					new file mode 100755
 | 
				
			||||||
index 0000000000..e75e35e8ef
 | 
					index 0000000000..3f24369f19
 | 
				
			||||||
--- /dev/null
 | 
					--- /dev/null
 | 
				
			||||||
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts
 | 
					+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4029-ap-cig-wf610d.dts
 | 
				
			||||||
@@ -0,0 +1,409 @@
 | 
					@@ -0,0 +1,414 @@
 | 
				
			||||||
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 | 
					+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 | 
				
			||||||
+ *
 | 
					+ *
 | 
				
			||||||
+ * Permission to use, copy, modify, and/or distribute this software for any
 | 
					+ * Permission to use, copy, modify, and/or distribute this software for any
 | 
				
			||||||
@@ -395,7 +395,13 @@ index 0000000000..e75e35e8ef
 | 
				
			|||||||
+					firmware@180000 {
 | 
					+					firmware@180000 {
 | 
				
			||||||
+						compatible = "denx,fit";
 | 
					+						compatible = "denx,fit";
 | 
				
			||||||
+						label = "firmware";
 | 
					+						label = "firmware";
 | 
				
			||||||
+						reg = <0x180000 0x1e80000>;
 | 
					+						reg = <0x180000 0x1e70000>;
 | 
				
			||||||
 | 
					+					};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+					certificates@1ff0000 {
 | 
				
			||||||
 | 
					+						compatible = "denx,fit";
 | 
				
			||||||
 | 
					+						label = "certificates";
 | 
				
			||||||
 | 
					+						reg = <0x1ff0000 0x10000>;
 | 
				
			||||||
+					};
 | 
					+					};
 | 
				
			||||||
+				};
 | 
					+				};
 | 
				
			||||||
+			};
 | 
					+			};
 | 
				
			||||||
@@ -522,9 +528,8 @@ index 0000000000..e75e35e8ef
 | 
				
			|||||||
+		};
 | 
					+		};
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
+		ess-switch@c000000 {
 | 
					+		ess-switch@c000000 {
 | 
				
			||||||
+			switch_cpu_bmp = <0x1>;  /* cpu port bitmap */
 | 
					 | 
				
			||||||
+			switch_lan_bmp = <0x3e>; /* lan port bitmap */
 | 
					+			switch_lan_bmp = <0x3e>; /* lan port bitmap */
 | 
				
			||||||
+			switch_wan_bmp = <0>; /* wan port bitmap */
 | 
					+			switch_wan_bmp = <1>; /* wan port bitmap */
 | 
				
			||||||
+			status = "okay";
 | 
					+			status = "okay";
 | 
				
			||||||
+		};
 | 
					+		};
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
@@ -589,7 +594,7 @@ index 0000000000..e75e35e8ef
 | 
				
			|||||||
+
 | 
					+
 | 
				
			||||||
+};
 | 
					+};
 | 
				
			||||||
diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
 | 
					diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
index a435a127fa..31f4971c90 100644
 | 
					index 49aa202e62..bca03f58ec 100644
 | 
				
			||||||
--- a/target/linux/ipq40xx/image/generic.mk
 | 
					--- a/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
+++ b/target/linux/ipq40xx/image/generic.mk
 | 
					+++ b/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
@@ -271,6 +271,20 @@ define Device/cilab_meshpoint-one
 | 
					@@ -271,6 +271,20 @@ define Device/cilab_meshpoint-one
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										375
									
								
								patches/ipq40xx/0016-ipq40xx-add-Indio-UM-550AC-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										375
									
								
								patches/ipq40xx/0016-ipq40xx-add-Indio-UM-550AC-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,375 @@
 | 
				
			|||||||
 | 
					From bac86b0d264589822e6020702e5eca04f6df40d8 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Sohail Ahmad <sohail@indionetworks.com>
 | 
				
			||||||
 | 
					Date: Fri, 6 May 2022 07:47:25 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] ipq40xx: Support for Indio's Outdoor IP67 WiFi5 AP UM-550AC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changes made in OpenWrt supported targets to support Indio's UM-550AC AP which is based on IPQ4019 chipset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Sohail Ahmad <sohail@indionetworks.com>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 .../ipq40xx/base-files/etc/board.d/02_network |   3 +-
 | 
				
			||||||
 | 
					 .../etc/hotplug.d/firmware/11-ath10k-caldata  |   6 +-
 | 
				
			||||||
 | 
					 .../arm/boot/dts/qcom-ipq4019-um-550ac.dts    |  94 ++++++++++
 | 
				
			||||||
 | 
					 .../arm/boot/dts/qcom-ipq4019-um-550ac.dtsi   | 168 ++++++++++++++++++
 | 
				
			||||||
 | 
					 target/linux/ipq40xx/image/generic.mk         |  14 ++
 | 
				
			||||||
 | 
					 .../ipq40xx/patches-5.4/999-hfcl_ion.patch    |   6 +-
 | 
				
			||||||
 | 
					 6 files changed, 285 insertions(+), 6 deletions(-)
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dts
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dtsi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					index 76e21801d9..a02f47f102 100755
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					@@ -124,7 +124,8 @@ ipq40xx_setup_interfaces()
 | 
				
			||||||
 | 
					 		ucidef_add_switch "switch0" \
 | 
				
			||||||
 | 
					 			"0u@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "0u@eth1" "5:wan"
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					-	um-325ac)
 | 
				
			||||||
 | 
					+	um-325ac |\
 | 
				
			||||||
 | 
					+	um-550ac) 
 | 
				
			||||||
 | 
					 		ucidef_set_interface_wan "eth0"
 | 
				
			||||||
 | 
					 		ucidef_set_interface_lan "eth1"
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
 | 
					index 3f32308f3e..785d51ed98 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
 | 
					@@ -173,7 +173,8 @@ case "$FIRMWARE" in
 | 
				
			||||||
 | 
					 		caldata_extract "0:ART" 4096 12064
 | 
				
			||||||
 | 
					 		ath10k_patch_mac $(mtd_get_mac_ascii 0:ART WLAN0_BASEMAC)
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					-	um-325ac)
 | 
				
			||||||
 | 
					+	um-325ac |\
 | 
				
			||||||
 | 
					+	um-550ac) 
 | 
				
			||||||
 | 
					 		caldata_extract "ART" 0x1000 0x2f20
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					 	esac
 | 
				
			||||||
 | 
					@@ -298,7 +299,8 @@ case "$FIRMWARE" in
 | 
				
			||||||
 | 
					 		caldata_extract "0:ART" 20480 12064
 | 
				
			||||||
 | 
					 		ath10k_patch_mac $(mtd_get_mac_ascii 0:ART WLAN1_BASEMAC)
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					-	um-325ac)
 | 
				
			||||||
 | 
					+	um-325ac |\
 | 
				
			||||||
 | 
					+	um-550ac) 
 | 
				
			||||||
 | 
					 		caldata_extract "ART" 0x5000 0x2f20
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					 	esac
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dts
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..a15df3f916
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dts
 | 
				
			||||||
 | 
					@@ -0,0 +1,94 @@
 | 
				
			||||||
 | 
					+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * Permission to use, copy, modify, and/or distribute this software for any
 | 
				
			||||||
 | 
					+ * purpose with or without fee is hereby granted, provided that the above
 | 
				
			||||||
 | 
					+ * copyright notice and this permission notice appear in all copies.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
				
			||||||
 | 
					+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
				
			||||||
 | 
					+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
				
			||||||
 | 
					+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
				
			||||||
 | 
					+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | 
				
			||||||
 | 
					+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#include "qcom-ipq4019-um-550ac.dtsi"
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+/ {
 | 
				
			||||||
 | 
					+	model = "Indio Networks UM-550AC";
 | 
				
			||||||
 | 
					+	compatible = "um-550ac";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	memory {
 | 
				
			||||||
 | 
					+		device_type = "memory";
 | 
				
			||||||
 | 
					+		reg = <0x80000000 0x10000000>;
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&blsp1_spi1 {
 | 
				
			||||||
 | 
					+	mx25l25635f@0 {
 | 
				
			||||||
 | 
					+		compatible = "mx25l25635f", "jedec,spi-nor";
 | 
				
			||||||
 | 
					+		#address-cells = <1>;
 | 
				
			||||||
 | 
					+		#size-cells = <1>;
 | 
				
			||||||
 | 
					+		reg = <0>;
 | 
				
			||||||
 | 
					+		spi-max-frequency = <24000000>;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		SBL1@0 {
 | 
				
			||||||
 | 
					+			label = "SBL1";
 | 
				
			||||||
 | 
					+			reg = <0x0 0x40000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		MIBIB@40000 {
 | 
				
			||||||
 | 
					+			label = "MIBIB";
 | 
				
			||||||
 | 
					+			reg = <0x40000 0x20000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		QSEE@60000 {
 | 
				
			||||||
 | 
					+			label = "QSEE";
 | 
				
			||||||
 | 
					+			reg = <0x60000 0x60000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		CDT@c0000 {
 | 
				
			||||||
 | 
					+			label = "CDT";
 | 
				
			||||||
 | 
					+			reg = <0xc0000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		DDRPARAMS@d0000 {
 | 
				
			||||||
 | 
					+			label = "DDRPARAMS";
 | 
				
			||||||
 | 
					+			reg = <0xd0000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		APPSBLENV@e0000 {
 | 
				
			||||||
 | 
					+			label = "APPSBLENV";
 | 
				
			||||||
 | 
					+			reg = <0xe0000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		APPSBL@f0000 {
 | 
				
			||||||
 | 
					+			label = "APPSBL";
 | 
				
			||||||
 | 
					+			reg = <0xf0000 0x80000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		ART@170000 {
 | 
				
			||||||
 | 
					+			label = "ART";
 | 
				
			||||||
 | 
					+			reg = <0x170000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		kernel@180000 {
 | 
				
			||||||
 | 
					+			label = "kernel";
 | 
				
			||||||
 | 
					+			reg = <0x180000 0x400000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		rootfs@580000 {
 | 
				
			||||||
 | 
					+			label = "rootfs";
 | 
				
			||||||
 | 
					+			reg = <0x580000 0x15F0000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		certificates@1b80000 {
 | 
				
			||||||
 | 
					+			label = "certificates";
 | 
				
			||||||
 | 
					+			reg = <0x1b80000 0x10000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		firmware@180000 {
 | 
				
			||||||
 | 
					+			label = "firmware";
 | 
				
			||||||
 | 
					+			reg = <0x180000 0x1a00000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dtsi b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dtsi
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..5f4c8a103b
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-550ac.dtsi
 | 
				
			||||||
 | 
					@@ -0,0 +1,168 @@
 | 
				
			||||||
 | 
					+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * Permission to use, copy, modify, and/or distribute this software for any
 | 
				
			||||||
 | 
					+ * purpose with or without fee is hereby granted, provided that the above
 | 
				
			||||||
 | 
					+ * copyright notice and this permission notice appear in all copies.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
				
			||||||
 | 
					+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
				
			||||||
 | 
					+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
				
			||||||
 | 
					+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
				
			||||||
 | 
					+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | 
				
			||||||
 | 
					+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#include "qcom-ipq4019.dtsi"
 | 
				
			||||||
 | 
					+#include <dt-bindings/soc/qcom,tcsr.h>
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+/ {
 | 
				
			||||||
 | 
					+	model = "Indio Networks UM-550AC";
 | 
				
			||||||
 | 
					+	compatible = "um-550ac";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	aliases {
 | 
				
			||||||
 | 
					+		serial0 = &blsp1_uart1;
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	chosen {
 | 
				
			||||||
 | 
					+		stdout-path = "serial0:115200n8";
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	soc {
 | 
				
			||||||
 | 
					+		tcsr@194b000 {
 | 
				
			||||||
 | 
					+			/* select hostmode */
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x194b000 0x100>;
 | 
				
			||||||
 | 
					+			qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		ess_tcsr@1953000 {
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x1953000 0x1000>;
 | 
				
			||||||
 | 
					+			qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		tcsr@1949000 {
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x1949000 0x100>;
 | 
				
			||||||
 | 
					+			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		tcsr@1957000 {
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x1957000 0x100>;
 | 
				
			||||||
 | 
					+			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		rng@22000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		pinctrl@1000000 {
 | 
				
			||||||
 | 
					+			serial_pins: serial_pinmux {
 | 
				
			||||||
 | 
					+				mux {
 | 
				
			||||||
 | 
					+					pins = "gpio60", "gpio61";
 | 
				
			||||||
 | 
					+					function = "blsp_uart0";
 | 
				
			||||||
 | 
					+					bias-disable;
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			spi_0_pins: spi_0_pinmux {
 | 
				
			||||||
 | 
					+				pinmux {
 | 
				
			||||||
 | 
					+					function = "blsp_spi0";
 | 
				
			||||||
 | 
					+					pins = "gpio55", "gpio56", "gpio57";
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+				pinmux_cs {
 | 
				
			||||||
 | 
					+					function = "gpio";
 | 
				
			||||||
 | 
					+					pins = "gpio54";
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+				pinconf {
 | 
				
			||||||
 | 
					+					pins = "gpio55", "gpio56", "gpio57";
 | 
				
			||||||
 | 
					+					drive-strength = <12>;
 | 
				
			||||||
 | 
					+					bias-disable;
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+				pinconf_cs {
 | 
				
			||||||
 | 
					+					pins = "gpio54";
 | 
				
			||||||
 | 
					+					drive-strength = <2>;
 | 
				
			||||||
 | 
					+					bias-disable;
 | 
				
			||||||
 | 
					+					output-high;
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		blsp_dma: dma@7884000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		spi@78b5000 {
 | 
				
			||||||
 | 
					+			pinctrl-0 = <&spi_0_pins>;
 | 
				
			||||||
 | 
					+			pinctrl-names = "default";
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+			cs-gpios = <&tlmm 54 0>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		serial@78af000 {
 | 
				
			||||||
 | 
					+			pinctrl-0 = <&serial_pins>;
 | 
				
			||||||
 | 
					+			pinctrl-names = "default";
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		cryptobam: dma@8e04000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		crypto@8e3a000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		watchdog@b017000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		wifi@a000000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		wifi@a800000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		mdio@90000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		ess-switch@c000000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		ess-psgmii@98000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		edma@c080000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb3_ss_phy: ssphy@9a000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb3_hs_phy: hsphy@a6000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb3: usb3@8af8800 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb2_hs_phy: hsphy@a8000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb2: usb2@60f8800 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
 | 
					index 526f20528f..7cfd20e9b6 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
 | 
					@@ -918,3 +918,17 @@ define Device/udaya_a5-id2
 | 
				
			||||||
 | 
					 	IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | append-metadata
 | 
				
			||||||
 | 
					 endef
 | 
				
			||||||
 | 
					 TARGET_DEVICES += udaya_a5-id2
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+define Device/um-550ac
 | 
				
			||||||
 | 
					+	DEVICE_VENDOR := Indio Networks
 | 
				
			||||||
 | 
					+	DEVICE_MODEL := UM-550AC
 | 
				
			||||||
 | 
					+	BOARD_NAME := um-550ac
 | 
				
			||||||
 | 
					+	SOC := qcom-ipq4019
 | 
				
			||||||
 | 
					+	DEVICE_DTS := qcom-ipq4019-um-550ac
 | 
				
			||||||
 | 
					+	KERNEL_INSTALL := 1
 | 
				
			||||||
 | 
					+	KERNEL_SIZE := 4096k
 | 
				
			||||||
 | 
					+	IMAGE_SIZE := 26624k
 | 
				
			||||||
 | 
					+	$(call Device/FitImage)
 | 
				
			||||||
 | 
					+	IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | append-metadata
 | 
				
			||||||
 | 
					+endef
 | 
				
			||||||
 | 
					+TARGET_DEVICES += um-550ac
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch b/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch
 | 
				
			||||||
 | 
					index 274071a5cc..d7b3de9508 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch
 | 
				
			||||||
 | 
					@@ -10,11 +10,11 @@ Index: linux-5.4.158/arch/arm/boot/dts/Makefile
 | 
				
			||||||
 | 
					  	qcom-ipq4028-wpj428.dtb \
 | 
				
			||||||
 | 
					  	qcom-ipq4029-ap-303.dtb \
 | 
				
			||||||
 | 
					  	qcom-ipq4029-ap-303h.dtb \
 | 
				
			||||||
 | 
					-@@ -906,6 +907,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \
 | 
				
			||||||
 | 
					- 	qcom-msm8974-sony-xperia-castor.dtb \
 | 
				
			||||||
 | 
					+@@ -907,6 +908,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \
 | 
				
			||||||
 | 
					  	qcom-msm8974-sony-xperia-honami.dtb \
 | 
				
			||||||
 | 
					  	qcom-mdm9615-wp8548-mangoh-green.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-ipq4019-um-325ac.dtb \
 | 
				
			||||||
 | 
					 +	qcom-ipq4018-udaya-a5-id2.dtb \
 | 
				
			||||||
 | 
					- 	qcom-ipq4019-um-325ac.dtb
 | 
				
			||||||
 | 
					+ 	qcom-ipq4019-um-550ac.dtb
 | 
				
			||||||
 | 
					  dtb-$(CONFIG_ARCH_RDA) += \
 | 
				
			||||||
 | 
					  	rda8810pl-orangepi-2g-iot.dtb \
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										409
									
								
								patches/ipq40xx/0017-ipq40xx-add-Indio-UM-510AC-V3-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										409
									
								
								patches/ipq40xx/0017-ipq40xx-add-Indio-UM-510AC-V3-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,409 @@
 | 
				
			|||||||
 | 
					From 38880b602348676c4643e0a435239a793bbfefab Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Sohail Ahmad <sohail@indionetworks.com>
 | 
				
			||||||
 | 
					Date: Fri, 6 May 2022 09:05:41 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] ipq40xx: Support for Indio UM-510AC-V3 AP Model, Outdoor
 | 
				
			||||||
 | 
					 WiFi5 AP based on IPQ40XX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Changes made in OpenWrt supported targets to support Indio's UM-510AC-V3 AP which is based on IPQ4019 chipset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Sohail Ahmad <sohail@indionetworks.com>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 .../ipq40xx/base-files/etc/board.d/02_network |   1 +
 | 
				
			||||||
 | 
					 .../etc/hotplug.d/firmware/11-ath10k-caldata  |   2 +
 | 
				
			||||||
 | 
					 .../arm/boot/dts/qcom-ipq4019-um-510ac-v3.dts |  94 ++++++++++
 | 
				
			||||||
 | 
					 .../boot/dts/qcom-ipq4019-um-510ac-v3.dtsi    | 168 ++++++++++++++++++
 | 
				
			||||||
 | 
					 target/linux/ipq40xx/image/generic.mk         |  15 ++
 | 
				
			||||||
 | 
					 .../912-dts-ipq4019-indio-um-550ac.patch      |  13 ++
 | 
				
			||||||
 | 
					 .../913-dts-ipq4019-indio-um-510ac-v3.patch   |  11 ++
 | 
				
			||||||
 | 
					 .../ipq40xx/patches-5.4/999-hfcl_ion.patch    |   4 +-
 | 
				
			||||||
 | 
					 8 files changed, 306 insertions(+), 2 deletions(-)
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dts
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dtsi
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ipq40xx/patches-5.4/912-dts-ipq4019-indio-um-550ac.patch
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ipq40xx/patches-5.4/913-dts-ipq4019-indio-um-510ac-v3.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					index a02f47f102..abaa6f3e16 100755
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					@@ -125,6 +125,7 @@ ipq40xx_setup_interfaces()
 | 
				
			||||||
 | 
					 			"0u@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "0u@eth1" "5:wan"
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					 	um-325ac |\
 | 
				
			||||||
 | 
					+	um-510ac-v3 |\
 | 
				
			||||||
 | 
					 	um-550ac) 
 | 
				
			||||||
 | 
					 		ucidef_set_interface_wan "eth0"
 | 
				
			||||||
 | 
					 		ucidef_set_interface_lan "eth1"
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
 | 
					index 785d51ed98..4af1d5ea2f 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
 | 
				
			||||||
 | 
					@@ -174,6 +174,7 @@ case "$FIRMWARE" in
 | 
				
			||||||
 | 
					 		ath10k_patch_mac $(mtd_get_mac_ascii 0:ART WLAN0_BASEMAC)
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					 	um-325ac |\
 | 
				
			||||||
 | 
					+	um-510ac-v3 |\
 | 
				
			||||||
 | 
					 	um-550ac) 
 | 
				
			||||||
 | 
					 		caldata_extract "ART" 0x1000 0x2f20
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					@@ -300,6 +301,7 @@ case "$FIRMWARE" in
 | 
				
			||||||
 | 
					 		ath10k_patch_mac $(mtd_get_mac_ascii 0:ART WLAN1_BASEMAC)
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					 	um-325ac |\
 | 
				
			||||||
 | 
					+	um-510ac-v3 |\
 | 
				
			||||||
 | 
					 	um-550ac) 
 | 
				
			||||||
 | 
					 		caldata_extract "ART" 0x5000 0x2f20
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dts
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..e0854189c1
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dts
 | 
				
			||||||
 | 
					@@ -0,0 +1,94 @@
 | 
				
			||||||
 | 
					+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * Permission to use, copy, modify, and/or distribute this software for any
 | 
				
			||||||
 | 
					+ * purpose with or without fee is hereby granted, provided that the above
 | 
				
			||||||
 | 
					+ * copyright notice and this permission notice appear in all copies.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
				
			||||||
 | 
					+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
				
			||||||
 | 
					+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
				
			||||||
 | 
					+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
				
			||||||
 | 
					+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | 
				
			||||||
 | 
					+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#include "qcom-ipq4019-um-510ac-v3.dtsi"
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+/ {
 | 
				
			||||||
 | 
					+	model = "Indio Networks UM-510AC-V3";
 | 
				
			||||||
 | 
					+	compatible = "um-510ac-v3";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	memory {
 | 
				
			||||||
 | 
					+		device_type = "memory";
 | 
				
			||||||
 | 
					+		reg = <0x80000000 0x10000000>;
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&blsp1_spi1 {
 | 
				
			||||||
 | 
					+	mx25l25635f@0 {
 | 
				
			||||||
 | 
					+		compatible = "mx25l25635f", "jedec,spi-nor";
 | 
				
			||||||
 | 
					+		#address-cells = <1>;
 | 
				
			||||||
 | 
					+		#size-cells = <1>;
 | 
				
			||||||
 | 
					+		reg = <0>;
 | 
				
			||||||
 | 
					+		spi-max-frequency = <24000000>;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		SBL1@0 {
 | 
				
			||||||
 | 
					+			label = "SBL1";
 | 
				
			||||||
 | 
					+			reg = <0x0 0x40000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		MIBIB@40000 {
 | 
				
			||||||
 | 
					+			label = "MIBIB";
 | 
				
			||||||
 | 
					+			reg = <0x40000 0x20000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		QSEE@60000 {
 | 
				
			||||||
 | 
					+			label = "QSEE";
 | 
				
			||||||
 | 
					+			reg = <0x60000 0x60000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		CDT@c0000 {
 | 
				
			||||||
 | 
					+			label = "CDT";
 | 
				
			||||||
 | 
					+			reg = <0xc0000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		DDRPARAMS@d0000 {
 | 
				
			||||||
 | 
					+			label = "DDRPARAMS";
 | 
				
			||||||
 | 
					+			reg = <0xd0000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		APPSBLENV@e0000 {
 | 
				
			||||||
 | 
					+			label = "APPSBLENV";
 | 
				
			||||||
 | 
					+			reg = <0xe0000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		APPSBL@f0000 {
 | 
				
			||||||
 | 
					+			label = "APPSBL";
 | 
				
			||||||
 | 
					+			reg = <0xf0000 0x80000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		ART@170000 {
 | 
				
			||||||
 | 
					+			label = "ART";
 | 
				
			||||||
 | 
					+			reg = <0x170000 0x10000>;
 | 
				
			||||||
 | 
					+			read-only;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		kernel@180000 {
 | 
				
			||||||
 | 
					+			label = "kernel";
 | 
				
			||||||
 | 
					+			reg = <0x180000 0x400000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		rootfs@580000 {
 | 
				
			||||||
 | 
					+			label = "rootfs";
 | 
				
			||||||
 | 
					+			reg = <0x580000 0x15F0000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		certificates@1b80000 {
 | 
				
			||||||
 | 
					+			label = "certificates";
 | 
				
			||||||
 | 
					+			reg = <0x1b80000 0x10000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+		firmware@180000 {
 | 
				
			||||||
 | 
					+			label = "firmware";
 | 
				
			||||||
 | 
					+			reg = <0x180000 0x1a00000>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dtsi b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dtsi
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..a8ad081f03
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-um-510ac-v3.dtsi
 | 
				
			||||||
 | 
					@@ -0,0 +1,168 @@
 | 
				
			||||||
 | 
					+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * Permission to use, copy, modify, and/or distribute this software for any
 | 
				
			||||||
 | 
					+ * purpose with or without fee is hereby granted, provided that the above
 | 
				
			||||||
 | 
					+ * copyright notice and this permission notice appear in all copies.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
				
			||||||
 | 
					+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
				
			||||||
 | 
					+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
				
			||||||
 | 
					+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
				
			||||||
 | 
					+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 | 
				
			||||||
 | 
					+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
				
			||||||
 | 
					+ *
 | 
				
			||||||
 | 
					+ */
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#include "qcom-ipq4019.dtsi"
 | 
				
			||||||
 | 
					+#include <dt-bindings/soc/qcom,tcsr.h>
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+/ {
 | 
				
			||||||
 | 
					+	model = "Indio Networks UM-510AC-V3";
 | 
				
			||||||
 | 
					+	compatible = "um-510ac-v3";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	aliases {
 | 
				
			||||||
 | 
					+		serial0 = &blsp1_uart1;
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	chosen {
 | 
				
			||||||
 | 
					+		stdout-path = "serial0:115200n8";
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	soc {
 | 
				
			||||||
 | 
					+		tcsr@194b000 {
 | 
				
			||||||
 | 
					+			/* select hostmode */
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x194b000 0x100>;
 | 
				
			||||||
 | 
					+			qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		ess_tcsr@1953000 {
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x1953000 0x1000>;
 | 
				
			||||||
 | 
					+			qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		tcsr@1949000 {
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x1949000 0x100>;
 | 
				
			||||||
 | 
					+			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		tcsr@1957000 {
 | 
				
			||||||
 | 
					+			compatible = "qcom,tcsr";
 | 
				
			||||||
 | 
					+			reg = <0x1957000 0x100>;
 | 
				
			||||||
 | 
					+			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		rng@22000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		pinctrl@1000000 {
 | 
				
			||||||
 | 
					+			serial_pins: serial_pinmux {
 | 
				
			||||||
 | 
					+				mux {
 | 
				
			||||||
 | 
					+					pins = "gpio60", "gpio61";
 | 
				
			||||||
 | 
					+					function = "blsp_uart0";
 | 
				
			||||||
 | 
					+					bias-disable;
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			spi_0_pins: spi_0_pinmux {
 | 
				
			||||||
 | 
					+				pinmux {
 | 
				
			||||||
 | 
					+					function = "blsp_spi0";
 | 
				
			||||||
 | 
					+					pins = "gpio55", "gpio56", "gpio57";
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+				pinmux_cs {
 | 
				
			||||||
 | 
					+					function = "gpio";
 | 
				
			||||||
 | 
					+					pins = "gpio54";
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+				pinconf {
 | 
				
			||||||
 | 
					+					pins = "gpio55", "gpio56", "gpio57";
 | 
				
			||||||
 | 
					+					drive-strength = <12>;
 | 
				
			||||||
 | 
					+					bias-disable;
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+				pinconf_cs {
 | 
				
			||||||
 | 
					+					pins = "gpio54";
 | 
				
			||||||
 | 
					+					drive-strength = <2>;
 | 
				
			||||||
 | 
					+					bias-disable;
 | 
				
			||||||
 | 
					+					output-high;
 | 
				
			||||||
 | 
					+				};
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		blsp_dma: dma@7884000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		spi@78b5000 {
 | 
				
			||||||
 | 
					+			pinctrl-0 = <&spi_0_pins>;
 | 
				
			||||||
 | 
					+			pinctrl-names = "default";
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+			cs-gpios = <&tlmm 54 0>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		serial@78af000 {
 | 
				
			||||||
 | 
					+			pinctrl-0 = <&serial_pins>;
 | 
				
			||||||
 | 
					+			pinctrl-names = "default";
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		cryptobam: dma@8e04000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		crypto@8e3a000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		watchdog@b017000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		wifi@a000000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		wifi@a800000 {
 | 
				
			||||||
 | 
					+			status = "ok";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		mdio@90000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		ess-switch@c000000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		ess-psgmii@98000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		edma@c080000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb3_ss_phy: ssphy@9a000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb3_hs_phy: hsphy@a6000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb3: usb3@8af8800 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb2_hs_phy: hsphy@a8000 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		usb2: usb2@60f8800 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
 | 
					index 7cfd20e9b6..c156cb3415 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/image/generic.mk
 | 
				
			||||||
 | 
					@@ -932,3 +932,18 @@ define Device/um-550ac
 | 
				
			||||||
 | 
					 	IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | append-metadata
 | 
				
			||||||
 | 
					 endef
 | 
				
			||||||
 | 
					 TARGET_DEVICES += um-550ac
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+define Device/um-510ac-v3
 | 
				
			||||||
 | 
					+	DEVICE_VENDOR := Indio Networks
 | 
				
			||||||
 | 
					+	DEVICE_MODEL := UM-510AC-V3
 | 
				
			||||||
 | 
					+	BOARD_NAME := um-510ac-v3
 | 
				
			||||||
 | 
					+	SOC := qcom-ipq4019
 | 
				
			||||||
 | 
					+	DEVICE_DTS := qcom-ipq4019-um-510ac-v3
 | 
				
			||||||
 | 
					+	KERNEL_INSTALL := 1
 | 
				
			||||||
 | 
					+	KERNEL_SIZE := 4096k
 | 
				
			||||||
 | 
					+	IMAGE_SIZE := 26624k
 | 
				
			||||||
 | 
					+	$(call Device/FitImage)
 | 
				
			||||||
 | 
					+	IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-rootfs | pad-rootfs | append-metadata
 | 
				
			||||||
 | 
					+endef
 | 
				
			||||||
 | 
					+TARGET_DEVICES += um-510ac-v3
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/patches-5.4/912-dts-ipq4019-indio-um-550ac.patch b/target/linux/ipq40xx/patches-5.4/912-dts-ipq4019-indio-um-550ac.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..876eb48d0a
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/patches-5.4/912-dts-ipq4019-indio-um-550ac.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					+diff -Nurb a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
 | 
				
			||||||
 | 
					+--- a/arch/arm/boot/dts/Makefile	2022-03-27 09:16:13.544943010 +0000
 | 
				
			||||||
 | 
					++++ b/arch/arm/boot/dts/Makefile	2022-03-27 09:17:15.574098533 +0000
 | 
				
			||||||
 | 
					+@@ -907,7 +907,8 @@
 | 
				
			||||||
 | 
					+ 	qcom-msm8974-sony-xperia-castor.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-msm8974-sony-xperia-honami.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-mdm9615-wp8548-mangoh-green.dtb \
 | 
				
			||||||
 | 
					+-	qcom-ipq4019-um-325ac.dtb
 | 
				
			||||||
 | 
					++	qcom-ipq4019-um-325ac.dtb \
 | 
				
			||||||
 | 
					++	qcom-ipq4019-um-550ac.dtb
 | 
				
			||||||
 | 
					+ dtb-$(CONFIG_ARCH_RDA) += \
 | 
				
			||||||
 | 
					+ 	rda8810pl-orangepi-2g-iot.dtb \
 | 
				
			||||||
 | 
					+ 	rda8810pl-orangepi-i96.dtb
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/patches-5.4/913-dts-ipq4019-indio-um-510ac-v3.patch b/target/linux/ipq40xx/patches-5.4/913-dts-ipq4019-indio-um-510ac-v3.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..dd22a709a7
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/patches-5.4/913-dts-ipq4019-indio-um-510ac-v3.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					+diff -Nurb a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
 | 
				
			||||||
 | 
					+--- a/arch/arm/boot/dts/Makefile	2022-03-31 03:03:23.379141391 +0000
 | 
				
			||||||
 | 
					++++ b/arch/arm/boot/dts/Makefile	2022-03-31 03:07:24.671320669 +0000
 | 
				
			||||||
 | 
					+@@ -908,6 +908,7 @@
 | 
				
			||||||
 | 
					+ 	qcom-msm8974-sony-xperia-honami.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-mdm9615-wp8548-mangoh-green.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-ipq4019-um-325ac.dtb \
 | 
				
			||||||
 | 
					++	qcom-ipq4019-um-510ac-v3.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-ipq4019-um-550ac.dtb
 | 
				
			||||||
 | 
					+ dtb-$(CONFIG_ARCH_RDA) += \
 | 
				
			||||||
 | 
					+ 	rda8810pl-orangepi-2g-iot.dtb \
 | 
				
			||||||
 | 
					diff --git a/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch b/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch
 | 
				
			||||||
 | 
					index d7b3de9508..5100c408b9 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch
 | 
				
			||||||
 | 
					+++ b/target/linux/ipq40xx/patches-5.4/999-hfcl_ion.patch
 | 
				
			||||||
 | 
					@@ -10,10 +10,10 @@ Index: linux-5.4.158/arch/arm/boot/dts/Makefile
 | 
				
			||||||
 | 
					  	qcom-ipq4028-wpj428.dtb \
 | 
				
			||||||
 | 
					  	qcom-ipq4029-ap-303.dtb \
 | 
				
			||||||
 | 
					  	qcom-ipq4029-ap-303h.dtb \
 | 
				
			||||||
 | 
					-@@ -907,6 +908,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \
 | 
				
			||||||
 | 
					- 	qcom-msm8974-sony-xperia-honami.dtb \
 | 
				
			||||||
 | 
					+@@ -908,6 +909,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \
 | 
				
			||||||
 | 
					  	qcom-mdm9615-wp8548-mangoh-green.dtb \
 | 
				
			||||||
 | 
					  	qcom-ipq4019-um-325ac.dtb \
 | 
				
			||||||
 | 
					+ 	qcom-ipq4019-um-510ac-v3.dtb \
 | 
				
			||||||
 | 
					 +	qcom-ipq4018-udaya-a5-id2.dtb \
 | 
				
			||||||
 | 
					  	qcom-ipq4019-um-550ac.dtb
 | 
				
			||||||
 | 
					  dtb-$(CONFIG_ARCH_RDA) += \
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -113,25 +113,6 @@ index 0000000000..6c429f1852
 | 
				
			|||||||
+config_foreach ubootenv_add_app_config ubootenv
 | 
					+config_foreach ubootenv_add_app_config ubootenv
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
+exit 0
 | 
					+exit 0
 | 
				
			||||||
diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile
 | 
					 | 
				
			||||||
index c33f26d46d..06236b5a47 100644
 | 
					 | 
				
			||||||
--- a/toolchain/kernel-headers/Makefile
 | 
					 | 
				
			||||||
+++ b/toolchain/kernel-headers/Makefile
 | 
					 | 
				
			||||||
@@ -12,6 +12,14 @@ BUILD_DIR := $(KERNEL_BUILD_DIR)
 | 
					 | 
				
			||||||
 override QUILT:=
 | 
					 | 
				
			||||||
 override HOST_QUILT:=
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
+include $(INCLUDE_DIR)/target.mk
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+ifeq ($(KERNEL_PATCHVER),4.4)
 | 
					 | 
				
			||||||
+  KERNEL_PATCHVER := 5.10
 | 
					 | 
				
			||||||
+  KERNEL_NAME_SUFFIX:=
 | 
					 | 
				
			||||||
+endif
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
+include $(INCLUDE_DIR)/kernel-version.mk
 | 
					 | 
				
			||||||
 include $(INCLUDE_DIR)/kernel.mk
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 PKG_NAME:=linux
 | 
					 | 
				
			||||||
-- 
 | 
					-- 
 | 
				
			||||||
2.25.1
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					From 398ceb5dee1a6e1e7e30e02d4f77316a83fdc5b1 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Sun, 22 May 2022 16:56:10 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] include/image-commands.mk: build mmc qdsk images
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 include/image-commands.mk | 7 +++++++
 | 
				
			||||||
 | 
					 1 file changed, 7 insertions(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/include/image-commands.mk b/include/image-commands.mk
 | 
				
			||||||
 | 
					index d4bce80e68..541ec4f575 100644
 | 
				
			||||||
 | 
					--- a/include/image-commands.mk
 | 
				
			||||||
 | 
					+++ b/include/image-commands.mk
 | 
				
			||||||
 | 
					@@ -354,6 +354,13 @@ define Build/qsdk-ipq-factory-nor
 | 
				
			||||||
 | 
					 	@mv $@.new $@
 | 
				
			||||||
 | 
					 endef
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+define Build/qsdk-ipq-factory-mmc
 | 
				
			||||||
 | 
					+	$(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \
 | 
				
			||||||
 | 
					+		$@.its hlos $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS)
 | 
				
			||||||
 | 
					+	PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new
 | 
				
			||||||
 | 
					+	@mv $@.new $@
 | 
				
			||||||
 | 
					+endef
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 define Build/seama
 | 
				
			||||||
 | 
					 	$(STAGING_DIR_HOST)/bin/seama -i $@ \
 | 
				
			||||||
 | 
					 		-m "dev=/dev/mtdblock/$(SEAMA_MTDBLOCK)" -m "type=firmware"
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
From dccf411274a126c0f12d16ec220fbbb518858d84 Mon Sep 17 00:00:00 2001
 | 
					From c8878d6eda88d844593bb6a6e205eafc27f32b34 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: Felix Fietkau <nbd@nbd.name>
 | 
					From: Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
Date: Thu, 10 Mar 2022 18:09:15 +0100
 | 
					Date: Thu, 10 Mar 2022 18:09:15 +0100
 | 
				
			||||||
Subject: [PATCH 14/14] update actiontec web7200 support
 | 
					Subject: [PATCH 02/37] update actiontec web7200 support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
					Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
@@ -16,10 +16,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 .../linux/ramips/files/include/nmbm/nmbm-os.h |   69 -
 | 
					 .../linux/ramips/files/include/nmbm/nmbm-os.h |   69 -
 | 
				
			||||||
 target/linux/ramips/files/include/nmbm/nmbm.h |  102 -
 | 
					 target/linux/ramips/files/include/nmbm/nmbm.h |  102 -
 | 
				
			||||||
 target/linux/ramips/image/mt7621.mk           |   20 +-
 | 
					 target/linux/ramips/image/mt7621.mk           |   20 +-
 | 
				
			||||||
 | 
					 .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |    5 +
 | 
				
			||||||
 .../mt7621/base-files/lib/upgrade/platform.sh |    7 +-
 | 
					 .../mt7621/base-files/lib/upgrade/platform.sh |    7 +-
 | 
				
			||||||
 target/linux/ramips/mt7621/config-5.4         |    8 -
 | 
					 target/linux/ramips/mt7621/config-5.4         |    8 -
 | 
				
			||||||
 .../499-mtd-add-nmbm-support.patch            |   21 -
 | 
					 .../499-mtd-add-nmbm-support.patch            |   21 -
 | 
				
			||||||
 14 files changed, 79 insertions(+), 4185 deletions(-)
 | 
					 15 files changed, 84 insertions(+), 4185 deletions(-)
 | 
				
			||||||
 delete mode 100644 target/linux/ramips/files/drivers/mtd/nmbm/Kconfig
 | 
					 delete mode 100644 target/linux/ramips/files/drivers/mtd/nmbm/Kconfig
 | 
				
			||||||
 delete mode 100644 target/linux/ramips/files/drivers/mtd/nmbm/Makefile
 | 
					 delete mode 100644 target/linux/ramips/files/drivers/mtd/nmbm/Makefile
 | 
				
			||||||
 delete mode 100644 target/linux/ramips/files/drivers/mtd/nmbm/nmbm-core.c
 | 
					 delete mode 100644 target/linux/ramips/files/drivers/mtd/nmbm/nmbm-core.c
 | 
				
			||||||
@@ -4352,6 +4353,22 @@ index 57c3efcf2b..81ef6bbd14 100644
 | 
				
			|||||||
 define Device/unielec_u7621-01-16m
 | 
					 define Device/unielec_u7621-01-16m
 | 
				
			||||||
   $(Device/dsa-migration)
 | 
					   $(Device/dsa-migration)
 | 
				
			||||||
   $(Device/uimage-lzma-loader)
 | 
					   $(Device/uimage-lzma-loader)
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 | 
				
			||||||
 | 
					index bd0f0254c6..7109a4647e 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 | 
				
			||||||
 | 
					@@ -10,6 +10,11 @@ PHYNBR=${DEVPATH##*/phy}
 | 
				
			||||||
 | 
					 board=$(board_name)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 case "$board" in
 | 
				
			||||||
 | 
					+	actiontec,web7200)
 | 
				
			||||||
 | 
					+		wan_mac=$(mtd_get_mac_ascii u-boot-env "AeiBaseMACAddr")
 | 
				
			||||||
 | 
					+		[ "$PHYNBR" = "0" ] && macaddr_add $wan_mac 2 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					+		[ "$PHYNBR" = "1" ] && macaddr_add $wan_mac 3 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					+		;;
 | 
				
			||||||
 | 
					 	glinet,gl-mt1300)
 | 
				
			||||||
 | 
					 		[ "$PHYNBR" = "1" ] && \
 | 
				
			||||||
 | 
					 			macaddr_add "$(mtd_get_mac_binary factory 0x4)" 1 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
 | 
					diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
 | 
				
			||||||
index 924f259e25..93f6e836dc 100755
 | 
					index 924f259e25..93f6e836dc 100755
 | 
				
			||||||
--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
 | 
					--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										281
									
								
								patches/ramips/0015-ramips-mt7621-indio-um-305ax-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										281
									
								
								patches/ramips/0015-ramips-mt7621-indio-um-305ax-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,281 @@
 | 
				
			|||||||
 | 
					From abd6918dc1af8d411aacc333bbddbfdcce25d439 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Wed, 20 Apr 2022 09:13:33 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 01/35] ramips: add mt7621_indio_um-305ax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 .../ramips/dts/mt7621_indio_um-305ax.dts      | 146 ++++++++++++++++++
 | 
				
			||||||
 | 
					 target/linux/ramips/image/mt7621.mk           |  12 ++
 | 
				
			||||||
 | 
					 .../mt7621/base-files/etc/board.d/02_network  |   6 +
 | 
				
			||||||
 | 
					 .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   6 +
 | 
				
			||||||
 | 
					 target/linux/ramips/mt7621/config-5.4         |  11 +-
 | 
				
			||||||
 | 
					 5 files changed, 176 insertions(+), 5 deletions(-)
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/dts/mt7621_indio_um-305ax.dts b/target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..79cffbdec2
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/dts/mt7621_indio_um-305ax.dts
 | 
				
			||||||
 | 
					@@ -0,0 +1,146 @@
 | 
				
			||||||
 | 
					+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#include "mt7621.dtsi"
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+#include <dt-bindings/gpio/gpio.h>
 | 
				
			||||||
 | 
					+#include <dt-bindings/input/input.h>
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+/ {
 | 
				
			||||||
 | 
					+	compatible = "indio,um-305ax", "mediatek,mt7621-soc";
 | 
				
			||||||
 | 
					+	model = "INDIO UM-305AX";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	aliases {
 | 
				
			||||||
 | 
					+		led-boot = &led_green;
 | 
				
			||||||
 | 
					+		led-failsafe = &led_red;
 | 
				
			||||||
 | 
					+		led-running = &led_blue;
 | 
				
			||||||
 | 
					+		led-upgrade = &led_red;
 | 
				
			||||||
 | 
					+		label-mac-device = &wan_port;
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	chosen {
 | 
				
			||||||
 | 
					+		bootargs = "console=ttyS0,115200";
 | 
				
			||||||
 | 
					+		bootargs-override = "console=ttyS0,115200";
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	leds {
 | 
				
			||||||
 | 
					+		compatible = "gpio-leds";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		led_blue: blue {
 | 
				
			||||||
 | 
					+			label = "blue";
 | 
				
			||||||
 | 
					+			gpios = <&gpio 24 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
 | 
					+			default-state = "off";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		led_red: red {
 | 
				
			||||||
 | 
					+			label = "red";
 | 
				
			||||||
 | 
					+			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
 | 
					+			default-state = "off";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		led_green: green {
 | 
				
			||||||
 | 
					+			label = "green";
 | 
				
			||||||
 | 
					+			gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	keys {
 | 
				
			||||||
 | 
					+		compatible = "gpio-keys-polled";
 | 
				
			||||||
 | 
					+		poll-interval = <50>;
 | 
				
			||||||
 | 
					+		pinctrl-names = "default";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		reset {
 | 
				
			||||||
 | 
					+			label = "reset";
 | 
				
			||||||
 | 
					+			gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
 | 
					+			linux,code = <KEY_RESTART>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&state_default {
 | 
				
			||||||
 | 
					+	gpio {
 | 
				
			||||||
 | 
					+		groups = "rgmii2";
 | 
				
			||||||
 | 
					+		function = "gpio";
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&pcie {
 | 
				
			||||||
 | 
					+	status = "okay";
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&pcie1 {
 | 
				
			||||||
 | 
					+	wifi@0,0 {
 | 
				
			||||||
 | 
					+		reg = <0x0 0 0 0 0>;
 | 
				
			||||||
 | 
					+		mediatek,mtd-eeprom = <&factory 0x0>;
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&gmac0 {
 | 
				
			||||||
 | 
					+	mtd-mac-address = <&factory 0x4>;
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&switch0 {
 | 
				
			||||||
 | 
					+	ports {
 | 
				
			||||||
 | 
					+		wan_port: port@0 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+			label = "wan";
 | 
				
			||||||
 | 
					+			mtd-mac-address = <&factory 0x28>;
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		port@1 {
 | 
				
			||||||
 | 
					+			status = "okay";
 | 
				
			||||||
 | 
					+			label = "lan";
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+&spi0 {
 | 
				
			||||||
 | 
					+	status = "okay";
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	flash@0 {
 | 
				
			||||||
 | 
					+		compatible = "jedec,spi-nor";
 | 
				
			||||||
 | 
					+		reg = <0>;
 | 
				
			||||||
 | 
					+		spi-max-frequency = <50000000>;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		partitions {
 | 
				
			||||||
 | 
					+			compatible = "fixed-partitions";
 | 
				
			||||||
 | 
					+			#address-cells = <1>;
 | 
				
			||||||
 | 
					+			#size-cells = <1>;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			partition@0 {
 | 
				
			||||||
 | 
					+				label = "u-boot";
 | 
				
			||||||
 | 
					+				reg = <0x0 0x30000>;
 | 
				
			||||||
 | 
					+				read-only;
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			partition@30000 {
 | 
				
			||||||
 | 
					+				label = "u-boot-env";
 | 
				
			||||||
 | 
					+				reg = <0x30000 0x10000>;
 | 
				
			||||||
 | 
					+				read-only;
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			partition@40000 {
 | 
				
			||||||
 | 
					+				label = "product";
 | 
				
			||||||
 | 
					+				reg = <0x40000 0x10000>;
 | 
				
			||||||
 | 
					+				read-only;
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			factory: partition@50000 {
 | 
				
			||||||
 | 
					+				label = "factory";
 | 
				
			||||||
 | 
					+				reg = <0x50000 0x40000>;
 | 
				
			||||||
 | 
					+				read-only;
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+			partition@90000 {
 | 
				
			||||||
 | 
					+				compatible = "denx,fit";
 | 
				
			||||||
 | 
					+				label = "firmware";
 | 
				
			||||||
 | 
					+				reg = <0x90000 0xf60000>;
 | 
				
			||||||
 | 
					+			};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		        partition@ff0000 {
 | 
				
			||||||
 | 
					+                                 label = "certificates";
 | 
				
			||||||
 | 
					+                                 reg = <0xff0000 0x10000>;
 | 
				
			||||||
 | 
					+                       };
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		};
 | 
				
			||||||
 | 
					+	};
 | 
				
			||||||
 | 
					+};
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
 | 
				
			||||||
 | 
					index 81ef6bbd14..9e1eed024b 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ramips/image/mt7621.mk
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/image/mt7621.mk
 | 
				
			||||||
 | 
					@@ -1736,3 +1736,15 @@ define Device/zyxel_wap6805
 | 
				
			||||||
 | 
					   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
 | 
				
			||||||
 | 
					 endef
 | 
				
			||||||
 | 
					 TARGET_DEVICES += zyxel_wap6805
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+define Device/indio_um-305ax
 | 
				
			||||||
 | 
					+  $(Device/dsa-migration)
 | 
				
			||||||
 | 
					+  DEVICE_VENDOR := INDIO
 | 
				
			||||||
 | 
					+  DEVICE_MODEL := UM-305AX
 | 
				
			||||||
 | 
					+  DEVICE_DTS_CONFIG := config@1
 | 
				
			||||||
 | 
					+  DEVICE_PACKAGES += kmod-mt7915e
 | 
				
			||||||
 | 
					+  KERNEL := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
 | 
				
			||||||
 | 
					+  IMAGE_SIZE := 15774k
 | 
				
			||||||
 | 
					+endef
 | 
				
			||||||
 | 
					+TARGET_DEVICES += indio_um-305ax
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					index b88fac6f59..c0a6bc884a 100755
 | 
				
			||||||
 | 
					--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					@@ -33,6 +33,7 @@ ramips_setup_interfaces()
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					 	actiontec,web7200|\
 | 
				
			||||||
 | 
					 	asiarf,ap7621-001|\
 | 
				
			||||||
 | 
					+	indio,um-305ax|\
 | 
				
			||||||
 | 
					 	winstars,ws-wn583a6)
 | 
				
			||||||
 | 
					 		ucidef_set_interfaces_lan_wan "lan" "wan"
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					@@ -173,6 +174,11 @@ ramips_setup_macs()
 | 
				
			||||||
 | 
					 		wan_mac=$label_mac
 | 
				
			||||||
 | 
					 		lan_mac=$(macaddr_add $label_mac 1)
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					+	indio,um-305ax)
 | 
				
			||||||
 | 
					+		label_mac=$(mtd_get_mac_binary factory 0x4)
 | 
				
			||||||
 | 
					+		wan_mac=$(macaddr_add $label_mac 1)
 | 
				
			||||||
 | 
					+		lan_mac=$label_mac
 | 
				
			||||||
 | 
					+		;;
 | 
				
			||||||
 | 
					 	esac
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	[ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 | 
				
			||||||
 | 
					index 7109a4647e..157e706534 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 | 
				
			||||||
 | 
					@@ -15,6 +15,12 @@ case "$board" in
 | 
				
			||||||
 | 
					 		[ "$PHYNBR" = "0" ] && macaddr_add $wan_mac 2 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					 		[ "$PHYNBR" = "1" ] && macaddr_add $wan_mac 3 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					+	indio,um-305ax)
 | 
				
			||||||
 | 
					+		[ "$PHYNBR" = "0" ] && \
 | 
				
			||||||
 | 
					+			macaddr_add "$(mtd_get_mac_binary factory 0x4)" 2 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					+		[ "$PHYNBR" = "1" ] && \
 | 
				
			||||||
 | 
					+			macaddr_add "$(mtd_get_mac_binary factory 0x4)" 3 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					+		;;
 | 
				
			||||||
 | 
					 	glinet,gl-mt1300)
 | 
				
			||||||
 | 
					 		[ "$PHYNBR" = "1" ] && \
 | 
				
			||||||
 | 
					 			macaddr_add "$(mtd_get_mac_binary factory 0x4)" 1 > /sys${DEVPATH}/macaddress
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/mt7621/config-5.4 b/target/linux/ramips/mt7621/config-5.4
 | 
				
			||||||
 | 
					index eada0ff602..809baf5441 100644
 | 
				
			||||||
 | 
					--- a/target/linux/ramips/mt7621/config-5.4
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/mt7621/config-5.4
 | 
				
			||||||
 | 
					@@ -43,6 +43,7 @@ CONFIG_CRYPTO_AEAD2=y
 | 
				
			||||||
 | 
					 CONFIG_CRYPTO_DEFLATE=y
 | 
				
			||||||
 | 
					 CONFIG_CRYPTO_HASH2=y
 | 
				
			||||||
 | 
					 CONFIG_CRYPTO_HASH_INFO=y
 | 
				
			||||||
 | 
					+CONFIG_CRYPTO_LIB_POLY1305_RSIZE=2
 | 
				
			||||||
 | 
					 CONFIG_CRYPTO_LZO=y
 | 
				
			||||||
 | 
					 CONFIG_CRYPTO_MANAGER=y
 | 
				
			||||||
 | 
					 CONFIG_CRYPTO_MANAGER2=y
 | 
				
			||||||
 | 
					@@ -53,17 +54,12 @@ CONFIG_DEBUG_PINCTRL=y
 | 
				
			||||||
 | 
					 CONFIG_DIMLIB=y
 | 
				
			||||||
 | 
					 CONFIG_DMA_NONCOHERENT=y
 | 
				
			||||||
 | 
					 CONFIG_DMA_NONCOHERENT_CACHE_SYNC=y
 | 
				
			||||||
 | 
					-# CONFIG_DMA_RALINK is not set
 | 
				
			||||||
 | 
					 # CONFIG_DTB_GNUBEE1 is not set
 | 
				
			||||||
 | 
					 # CONFIG_DTB_GNUBEE2 is not set
 | 
				
			||||||
 | 
					 CONFIG_DTB_RT_NONE=y
 | 
				
			||||||
 | 
					 CONFIG_DTC=y
 | 
				
			||||||
 | 
					 CONFIG_EARLY_PRINTK=y
 | 
				
			||||||
 | 
					-CONFIG_EFI_EARLYCON=y
 | 
				
			||||||
 | 
					 CONFIG_FIXED_PHY=y
 | 
				
			||||||
 | 
					-CONFIG_FONT_8x16=y
 | 
				
			||||||
 | 
					-CONFIG_FONT_AUTOSELECT=y
 | 
				
			||||||
 | 
					-CONFIG_FONT_SUPPORT=y
 | 
				
			||||||
 | 
					 CONFIG_FW_LOADER_PAGED_BUF=y
 | 
				
			||||||
 | 
					 CONFIG_GENERIC_ATOMIC64=y
 | 
				
			||||||
 | 
					 CONFIG_GENERIC_CLOCKEVENTS=y
 | 
				
			||||||
 | 
					@@ -209,6 +205,7 @@ CONFIG_PHYLIB=y
 | 
				
			||||||
 | 
					 CONFIG_PHYLINK=y
 | 
				
			||||||
 | 
					 # CONFIG_PHY_RALINK_USB is not set
 | 
				
			||||||
 | 
					 CONFIG_PINCTRL=y
 | 
				
			||||||
 | 
					+CONFIG_PINCTRL_AW9523=y
 | 
				
			||||||
 | 
					 CONFIG_PINCTRL_RT2880=y
 | 
				
			||||||
 | 
					 # CONFIG_PINCTRL_SINGLE is not set
 | 
				
			||||||
 | 
					 CONFIG_PINCTRL_SX150X=y
 | 
				
			||||||
 | 
					@@ -222,7 +219,11 @@ CONFIG_RALINK=y
 | 
				
			||||||
 | 
					 CONFIG_RATIONAL=y
 | 
				
			||||||
 | 
					 CONFIG_RCU_NEED_SEGCBLIST=y
 | 
				
			||||||
 | 
					 CONFIG_RCU_STALL_COMMON=y
 | 
				
			||||||
 | 
					+CONFIG_REED_SOLOMON=y
 | 
				
			||||||
 | 
					+CONFIG_REED_SOLOMON_DEC8=y
 | 
				
			||||||
 | 
					+CONFIG_REED_SOLOMON_ENC8=y
 | 
				
			||||||
 | 
					 CONFIG_REGMAP=y
 | 
				
			||||||
 | 
					+CONFIG_REGMAP_I2C=y
 | 
				
			||||||
 | 
					 CONFIG_REGMAP_MMIO=y
 | 
				
			||||||
 | 
					 CONFIG_REGULATOR=y
 | 
				
			||||||
 | 
					 CONFIG_REGULATOR_FIXED_VOLTAGE=y
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					From 7d9a7204d421589a9514cf7f56de170e51889f2a Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Wed, 4 May 2022 17:08:45 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] ramips: disable switch/bridge offload
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is breaking win10 laptops when vlan_filtering is enabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 target/linux/ramips/patches-5.4/992-dsa.patch | 30 +++++++++++++++++++
 | 
				
			||||||
 | 
					 1 file changed, 30 insertions(+)
 | 
				
			||||||
 | 
					 create mode 100644 target/linux/ramips/patches-5.4/992-dsa.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/target/linux/ramips/patches-5.4/992-dsa.patch b/target/linux/ramips/patches-5.4/992-dsa.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..3c130a5be8
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/target/linux/ramips/patches-5.4/992-dsa.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					+Index: linux-5.4.158/drivers/net/dsa/mt7530.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- linux-5.4.158.orig/drivers/net/dsa/mt7530.c
 | 
				
			||||||
 | 
					++++ linux-5.4.158/drivers/net/dsa/mt7530.c
 | 
				
			||||||
 | 
					+@@ -1608,17 +1608,17 @@ static const struct dsa_switch_ops mt753
 | 
				
			||||||
 | 
					+ 	.port_enable		= mt7530_port_enable,
 | 
				
			||||||
 | 
					+ 	.port_disable		= mt7530_port_disable,
 | 
				
			||||||
 | 
					+ 	.port_stp_state_set	= mt7530_stp_state_set,
 | 
				
			||||||
 | 
					+-	.port_bridge_join	= mt7530_port_bridge_join,
 | 
				
			||||||
 | 
					+-	.port_bridge_leave	= mt7530_port_bridge_leave,
 | 
				
			||||||
 | 
					++//	.port_bridge_join	= mt7530_port_bridge_join,
 | 
				
			||||||
 | 
					++//	.port_bridge_leave	= mt7530_port_bridge_leave,
 | 
				
			||||||
 | 
					+ 	.port_fdb_add		= mt7530_port_fdb_add,
 | 
				
			||||||
 | 
					+ 	.port_fdb_del		= mt7530_port_fdb_del,
 | 
				
			||||||
 | 
					+ 	.port_fdb_dump		= mt7530_port_fdb_dump,
 | 
				
			||||||
 | 
					+-	.port_vlan_filtering	= mt7530_port_vlan_filtering,
 | 
				
			||||||
 | 
					+-	.port_vlan_prepare	= mt7530_port_vlan_prepare,
 | 
				
			||||||
 | 
					+-	.port_vlan_add		= mt7530_port_vlan_add,
 | 
				
			||||||
 | 
					+-	.port_vlan_del		= mt7530_port_vlan_del,
 | 
				
			||||||
 | 
					+-	.port_mirror_add	= mt7530_port_mirror_add,
 | 
				
			||||||
 | 
					+-	.port_mirror_del	= mt7530_port_mirror_del,
 | 
				
			||||||
 | 
					++//	.port_vlan_filtering	= mt7530_port_vlan_filtering,
 | 
				
			||||||
 | 
					++//	.port_vlan_prepare	= mt7530_port_vlan_prepare,
 | 
				
			||||||
 | 
					++//	.port_vlan_add		= mt7530_port_vlan_add,
 | 
				
			||||||
 | 
					++//	.port_vlan_del		= mt7530_port_vlan_del,
 | 
				
			||||||
 | 
					++//	.port_mirror_add	= mt7530_port_mirror_add,
 | 
				
			||||||
 | 
					++//	.port_mirror_del	= mt7530_port_mirror_del,
 | 
				
			||||||
 | 
					+ 	.phylink_validate	= mt7530_phylink_validate,
 | 
				
			||||||
 | 
					+ 	.phylink_mac_link_state = mt7530_phylink_mac_link_state,
 | 
				
			||||||
 | 
					+ 	.phylink_mac_config	= mt7530_phylink_mac_config,
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,13 +1,12 @@
 | 
				
			|||||||
From d692bfd33a8169b47dcf200fcfd238cdbc4a4084 Mon Sep 17 00:00:00 2001
 | 
					From 9572a5a438a8fc6e53283cdab8f56479509e476f Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: John Crispin <john@phrozen.org>
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
Date: Sun, 2 Jan 2022 09:56:17 +0100
 | 
					Date: Sat, 7 May 2022 19:48:29 +0200
 | 
				
			||||||
Subject: [PATCH 70/83] rtkmipsel: add kernel-version
 | 
					Subject: [PATCH] rtkmipsel: add kernel-version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: John Crispin <john@phrozen.org>
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 include/kernel-version.mk | 2 ++
 | 
					 include/kernel-version.mk | 2 ++
 | 
				
			||||||
 include/target.mk         | 2 +-
 | 
					 1 file changed, 2 insertions(+)
 | 
				
			||||||
 2 files changed, 3 insertions(+), 1 deletion(-)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/include/kernel-version.mk b/include/kernel-version.mk
 | 
					diff --git a/include/kernel-version.mk b/include/kernel-version.mk
 | 
				
			||||||
index efecf2f919..787abfca14 100644
 | 
					index efecf2f919..787abfca14 100644
 | 
				
			||||||
@@ -27,19 +26,6 @@ index efecf2f919..787abfca14 100644
 | 
				
			|||||||
 LINUX_KERNEL_HASH-4.4.60 = e7f2f47acf17497d6ffd713eda65c025b3df0bce09faa8c04712bf1b3cfc9fdb
 | 
					 LINUX_KERNEL_HASH-4.4.60 = e7f2f47acf17497d6ffd713eda65c025b3df0bce09faa8c04712bf1b3cfc9fdb
 | 
				
			||||||
 LINUX_KERNEL_HASH-4.14.193 = 0b0fb41d4430e1a42738b341cbfd2f41951aa5cd02acabbd53f076119c8b9f03
 | 
					 LINUX_KERNEL_HASH-4.14.193 = 0b0fb41d4430e1a42738b341cbfd2f41951aa5cd02acabbd53f076119c8b9f03
 | 
				
			||||||
 LINUX_KERNEL_HASH-5.4.158 = 6e018fecdc8fc24553756e582d83b82d65b10a6b03ef36262a24911f839b8d59
 | 
					 LINUX_KERNEL_HASH-5.4.158 = 6e018fecdc8fc24553756e582d83b82d65b10a6b03ef36262a24911f839b8d59
 | 
				
			||||||
diff --git a/include/target.mk b/include/target.mk
 | 
					 | 
				
			||||||
index 691f8fb186..d198d59262 100644
 | 
					 | 
				
			||||||
--- a/include/target.mk
 | 
					 | 
				
			||||||
+++ b/include/target.mk
 | 
					 | 
				
			||||||
@@ -138,7 +138,7 @@ ifneq ($(TARGET_BUILD)$(if $(DUMP),,1),)
 | 
					 | 
				
			||||||
 endif
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 GENERIC_PLATFORM_DIR := $(TOPDIR)/target/linux/generic
 | 
					 | 
				
			||||||
-ifeq ($(CONFIG_TARGET_ipq807x),y)
 | 
					 | 
				
			||||||
+ifeq ($(CONFIG_TARGET_ipq807x)$(CONFIG_TARGET_rtkmipsel),y)
 | 
					 | 
				
			||||||
 GENERIC_BACKPORT_DIR :=
 | 
					 | 
				
			||||||
 GENERIC_PATCH_DIR :=
 | 
					 | 
				
			||||||
 GENERIC_HACK_DIR :=
 | 
					 | 
				
			||||||
-- 
 | 
					-- 
 | 
				
			||||||
2.25.1
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,34 +1,36 @@
 | 
				
			|||||||
From 985c5b1cf2101c9824076b5fe1062b589f81f168 Mon Sep 17 00:00:00 2001
 | 
					From 414f0c79a0fac86020f220b6feba518926420491 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: John Crispin <john@phrozen.org>
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
Date: Wed, 3 Nov 2021 14:33:31 +0100
 | 
					Date: Sat, 7 May 2022 19:50:33 +0200
 | 
				
			||||||
Subject: [PATCH 49/51] kernel-headers: add v3.18->v5.10 support
 | 
					Subject: [PATCH 4/4] kernel-headers: add v3.18->v5.10 support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: John Crispin <john@phrozen.org>
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 toolchain/kernel-headers/Makefile | 8 +++++++-
 | 
					 toolchain/kernel-headers/Makefile | 12 ++++++++++++
 | 
				
			||||||
 1 file changed, 7 insertions(+), 1 deletion(-)
 | 
					 1 file changed, 12 insertions(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile
 | 
					diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile
 | 
				
			||||||
index 06236b5a47..df6e734bc2 100644
 | 
					index c33f26d46d..a97f230d57 100644
 | 
				
			||||||
--- a/toolchain/kernel-headers/Makefile
 | 
					--- a/toolchain/kernel-headers/Makefile
 | 
				
			||||||
+++ b/toolchain/kernel-headers/Makefile
 | 
					+++ b/toolchain/kernel-headers/Makefile
 | 
				
			||||||
@@ -14,9 +14,15 @@ override HOST_QUILT:=
 | 
					@@ -14,6 +14,18 @@ override HOST_QUILT:=
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 include $(INCLUDE_DIR)/target.mk
 | 
					 include $(INCLUDE_DIR)/kernel.mk
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
-ifeq ($(KERNEL_PATCHVER),4.4)
 | 
					+ifneq ($(KERNEL_NAME_SUFFIX),)
 | 
				
			||||||
+
 | 
					+  KERNEL_PATCHVER := 5.10
 | 
				
			||||||
+ifneq ($(filter 3.18 4.4,$(KERNEL_PATCHVER)),)
 | 
					+  KERNEL_NAME_SUFFIX:=
 | 
				
			||||||
   KERNEL_PATCHVER := 5.10
 | 
					 | 
				
			||||||
   KERNEL_NAME_SUFFIX:=
 | 
					 | 
				
			||||||
+  GENERIC_BACKPORT_DIR := $(GENERIC_PLATFORM_DIR)/backport$(if $(wildcard $(GENERIC_PLATFORM_DIR)/backport-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
 | 
					+  GENERIC_BACKPORT_DIR := $(GENERIC_PLATFORM_DIR)/backport$(if $(wildcard $(GENERIC_PLATFORM_DIR)/backport-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
 | 
				
			||||||
+  GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/pending$(if $(wildcard $(GENERIC_PLATFORM_DIR)/pending-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
 | 
					+  GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/pending$(if $(wildcard $(GENERIC_PLATFORM_DIR)/pending-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
 | 
				
			||||||
+  GENERIC_HACK_DIR := $(GENERIC_PLATFORM_DIR)/hack$(if $(wildcard $(GENERIC_PLATFORM_DIR)/hack-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
 | 
					+  GENERIC_HACK_DIR := $(GENERIC_PLATFORM_DIR)/hack$(if $(wildcard $(GENERIC_PLATFORM_DIR)/hack-$(KERNEL_PATCHVER)),-$(KERNEL_PATCHVER))
 | 
				
			||||||
+  GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)")
 | 
					+  GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)")
 | 
				
			||||||
+  $(warning GENERIC_BACKPORT_DIR = $(GENERIC_BACKPORT_DIR))
 | 
					+  $(warning GENERIC_BACKPORT_DIR = $(GENERIC_BACKPORT_DIR))
 | 
				
			||||||
 endif
 | 
					+  include $(INCLUDE_DIR)/kernel-version.mk
 | 
				
			||||||
 
 | 
					+  include $(INCLUDE_DIR)/kernel.mk
 | 
				
			||||||
 include $(INCLUDE_DIR)/kernel-version.mk
 | 
					+endif
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 PKG_NAME:=linux
 | 
				
			||||||
 | 
					 PKG_VERSION:=$(LINUX_VERSION)
 | 
				
			||||||
 | 
					 PKG_SOURCE:=$(LINUX_SOURCE)
 | 
				
			||||||
-- 
 | 
					-- 
 | 
				
			||||||
2.25.1
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
From b982cd26327d9bfe9460b39916a7a8b519f59315 Mon Sep 17 00:00:00 2001
 | 
					From aa6938c36045da952053965eefdb7a29049641e9 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
From: John Crispin <john@phrozen.org>
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
Date: Sun, 2 Jan 2022 10:09:59 +0100
 | 
					Date: Sun, 8 May 2022 07:03:08 +0200
 | 
				
			||||||
Subject: [PATCH 1/2] rtkmipsel: select gcc-5 as the compiler
 | 
					Subject: [PATCH] rtkmipsel: select gcc-5 as the compiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Signed-off-by: John Crispin <john@phrozen.org>
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					From c56a1d430f797495d23829547b3cf595d8282c19 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Mon, 2 May 2022 08:46:19 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] hostapd: fix phy level max-assoc settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 .../services/hostapd/patches/780-maxassoc.patch     | 13 +++++++++++++
 | 
				
			||||||
 | 
					 1 file changed, 13 insertions(+)
 | 
				
			||||||
 | 
					 create mode 100644 package/network/services/hostapd/patches/780-maxassoc.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/network/services/hostapd/patches/780-maxassoc.patch b/package/network/services/hostapd/patches/780-maxassoc.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..98840f382a
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/package/network/services/hostapd/patches/780-maxassoc.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					+Index: hostapd-2021-02-20-59e9794c/src/ap/sta_info.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2021-02-20-59e9794c.orig/src/ap/sta_info.c
 | 
				
			||||||
 | 
					++++ hostapd-2021-02-20-59e9794c/src/ap/sta_info.c
 | 
				
			||||||
 | 
					+@@ -717,7 +717,7 @@ struct sta_info * ap_sta_add(struct host
 | 
				
			||||||
 | 
					+ 		return sta;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 	wpa_printf(MSG_DEBUG, "  New STA");
 | 
				
			||||||
 | 
					+-	if (hapd->num_sta >= hapd->conf->max_num_sta) {
 | 
				
			||||||
 | 
					++	if (hostapd_check_max_sta(hapd)) {
 | 
				
			||||||
 | 
					+ 		/* FIX: might try to remove some old STAs first? */
 | 
				
			||||||
 | 
					+ 		wpa_printf(MSG_DEBUG, "no more room for new STAs (%d/%d)",
 | 
				
			||||||
 | 
					+ 			   hapd->num_sta, hapd->conf->max_num_sta);
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										32
									
								
								patches/wifi/0013-netifd-add-psk-radius.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								patches/wifi/0013-netifd-add-psk-radius.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					From 43a6bc51c3e71201a32ab0f03606eb078eff19ee Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Arif Alam <arif.alam@netexperience.com>
 | 
				
			||||||
 | 
					Date: Tue, 26 Apr 2022 17:37:58 -0400
 | 
				
			||||||
 | 
					Subject: [PATCH] netifd: add psk radius
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Arif Alam <arif.alam@netexperience.com>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 .../config/netifd/patches/200-psk-radius.patch       | 12 ++++++++++++
 | 
				
			||||||
 | 
					 1 file changed, 12 insertions(+)
 | 
				
			||||||
 | 
					 create mode 100644 package/network/config/netifd/patches/200-psk-radius.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/network/config/netifd/patches/200-psk-radius.patch b/package/network/config/netifd/patches/200-psk-radius.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..b6f6cdfda0
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/package/network/config/netifd/patches/200-psk-radius.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					+--- a/scripts/netifd-wireless.sh
 | 
				
			||||||
 | 
					++++ b/scripts/netifd-wireless.sh
 | 
				
			||||||
 | 
					+@@ -260,6 +260,9 @@ wireless_vif_parse_encryption() {
 | 
				
			||||||
 | 
					+ 		wpa3*)
 | 
				
			||||||
 | 
					+ 			auth_type=eap256
 | 
				
			||||||
 | 
					+ 		;;
 | 
				
			||||||
 | 
					++		psk2-radius*)
 | 
				
			||||||
 | 
					++			auth_type=psk2-radius
 | 
				
			||||||
 | 
					++		;;
 | 
				
			||||||
 | 
					+ 		psk3-mixed*|sae-mixed*)
 | 
				
			||||||
 | 
					+ 			auth_type=psk-sae
 | 
				
			||||||
 | 
					+ 		;;
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										972
									
								
								patches/wifi/0014-hostapd-add-psk2-radius-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										972
									
								
								patches/wifi/0014-hostapd-add-psk2-radius-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,972 @@
 | 
				
			|||||||
 | 
					From 658484bf494873895a1e78835a65ed8297e67348 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Mon, 30 May 2022 14:57:44 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 14/15] hostapd: add psk2-radius support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 ...ACL-PSK-check-during-4-way-handshake.patch | 484 ++++++++++++++++++
 | 
				
			||||||
 | 
					 ...ributes-with-Extended-Types-RFC-6929.patch | 350 +++++++++++++
 | 
				
			||||||
 | 
					 ...ibutes-for-EAPOL-Key-message-details.patch | 102 ++++
 | 
				
			||||||
 | 
					 3 files changed, 936 insertions(+)
 | 
				
			||||||
 | 
					 create mode 100644 package/network/services/hostapd/patches/n00-001-RADIUS-ACL-PSK-check-during-4-way-handshake.patch
 | 
				
			||||||
 | 
					 create mode 100644 package/network/services/hostapd/patches/n00-002-RADIUS-Attributes-with-Extended-Types-RFC-6929.patch
 | 
				
			||||||
 | 
					 create mode 100644 package/network/services/hostapd/patches/n00-003-RADIUS-attributes-for-EAPOL-Key-message-details.patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/network/services/hostapd/patches/n00-001-RADIUS-ACL-PSK-check-during-4-way-handshake.patch b/package/network/services/hostapd/patches/n00-001-RADIUS-ACL-PSK-check-during-4-way-handshake.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..7a265ecc6b
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/package/network/services/hostapd/patches/n00-001-RADIUS-ACL-PSK-check-during-4-way-handshake.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,484 @@
 | 
				
			||||||
 | 
					+From 1c3438fec4bad13a676617915ff56af54e7b4542 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					+From: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+Date: Sat, 2 Apr 2022 13:12:43 +0300
 | 
				
			||||||
 | 
					+Subject: [PATCH] RADIUS ACL/PSK check during 4-way handshake
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Add an alternative sequence for performing the RADIUS ACL check and PSK
 | 
				
			||||||
 | 
					+fetch. The previously used (macaddr_acl=2, wpa_psk_radius=2) combination
 | 
				
			||||||
 | 
					+does this during IEEE 802.11 Authentication frame exchange while the new
 | 
				
			||||||
 | 
					+option (wpa_psk_radius=3) does this during the 4-way handshake. This
 | 
				
			||||||
 | 
					+allows some more information to be provided to the RADIUS authentication
 | 
				
			||||||
 | 
					+server.
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Signed-off-by: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+---
 | 
				
			||||||
 | 
					+ hostapd/config_file.c    |  3 +-
 | 
				
			||||||
 | 
					+ hostapd/hostapd.conf     |  5 ++-
 | 
				
			||||||
 | 
					+ src/ap/ap_config.c       |  4 ++-
 | 
				
			||||||
 | 
					+ src/ap/ap_config.h       |  5 +--
 | 
				
			||||||
 | 
					+ src/ap/ieee802_11.c      |  5 ++-
 | 
				
			||||||
 | 
					+ src/ap/ieee802_11.h      |  2 ++
 | 
				
			||||||
 | 
					+ src/ap/ieee802_11_auth.c | 76 ++++++++++++++++++++++++++++++++++++----
 | 
				
			||||||
 | 
					+ src/ap/ieee802_11_auth.h |  5 ++-
 | 
				
			||||||
 | 
					+ src/ap/wpa_auth.c        | 51 ++++++++++++++++++++++++++-
 | 
				
			||||||
 | 
					+ src/ap/wpa_auth.h        |  9 ++++-
 | 
				
			||||||
 | 
					+ src/ap/wpa_auth_glue.c   | 25 ++++++++++++-
 | 
				
			||||||
 | 
					+ src/ap/wpa_auth_i.h      |  1 +
 | 
				
			||||||
 | 
					+ 12 files changed, 172 insertions(+), 19 deletions(-)
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/hostapd/config_file.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/hostapd/config_file.c
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/hostapd/config_file.c
 | 
				
			||||||
 | 
					+@@ -2989,7 +2989,8 @@ static int hostapd_config_fill(struct ho
 | 
				
			||||||
 | 
					+ 		bss->wpa_psk_radius = atoi(pos);
 | 
				
			||||||
 | 
					+ 		if (bss->wpa_psk_radius != PSK_RADIUS_IGNORED &&
 | 
				
			||||||
 | 
					+ 		    bss->wpa_psk_radius != PSK_RADIUS_ACCEPTED &&
 | 
				
			||||||
 | 
					+-		    bss->wpa_psk_radius != PSK_RADIUS_REQUIRED) {
 | 
				
			||||||
 | 
					++		    bss->wpa_psk_radius != PSK_RADIUS_REQUIRED &&
 | 
				
			||||||
 | 
					++		    bss->wpa_psk_radius != PSK_RADIUS_DURING_4WAY_HS) {
 | 
				
			||||||
 | 
					+ 			wpa_printf(MSG_ERROR,
 | 
				
			||||||
 | 
					+ 				   "Line %d: unknown wpa_psk_radius %d",
 | 
				
			||||||
 | 
					+ 				   line, bss->wpa_psk_radius);
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/hostapd/hostapd.conf
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/hostapd/hostapd.conf
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/hostapd/hostapd.conf
 | 
				
			||||||
 | 
					+@@ -1651,12 +1651,15 @@ own_ip_addr=127.0.0.1
 | 
				
			||||||
 | 
					+ #wpa_psk_file=/etc/hostapd.wpa_psk
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ # Optionally, WPA passphrase can be received from RADIUS authentication server
 | 
				
			||||||
 | 
					+-# This requires macaddr_acl to be set to 2 (RADIUS)
 | 
				
			||||||
 | 
					++# This requires macaddr_acl to be set to 2 (RADIUS) for wpa_psk_radius values
 | 
				
			||||||
 | 
					++# 1 and 2.
 | 
				
			||||||
 | 
					+ # 0 = disabled (default)
 | 
				
			||||||
 | 
					+ # 1 = optional; use default passphrase/psk if RADIUS server does not include
 | 
				
			||||||
 | 
					+ #	Tunnel-Password
 | 
				
			||||||
 | 
					+ # 2 = required; reject authentication if RADIUS server does not include
 | 
				
			||||||
 | 
					+ #	Tunnel-Password
 | 
				
			||||||
 | 
					++# 3 = ask RADIUS server during 4-way handshake if there is no locally
 | 
				
			||||||
 | 
					++#	configured PSK/passphrase for the STA
 | 
				
			||||||
 | 
					+ #wpa_psk_radius=0
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ # Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/ap_config.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/ap_config.c
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/ap_config.c
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * hostapd / Configuration helper functions
 | 
				
			||||||
 | 
					+- * Copyright (c) 2003-2014, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -1245,6 +1245,7 @@ static int hostapd_config_check_bss(stru
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 	if (full_config && bss->wpa &&
 | 
				
			||||||
 | 
					+ 	    bss->wpa_psk_radius != PSK_RADIUS_IGNORED &&
 | 
				
			||||||
 | 
					++	    bss->wpa_psk_radius != PSK_RADIUS_DURING_4WAY_HS &&
 | 
				
			||||||
 | 
					+ 	    bss->macaddr_acl != USE_EXTERNAL_RADIUS_AUTH) {
 | 
				
			||||||
 | 
					+ 		wpa_printf(MSG_ERROR, "WPA-PSK using RADIUS enabled, but no "
 | 
				
			||||||
 | 
					+ 			   "RADIUS checking (macaddr_acl=2) enabled.");
 | 
				
			||||||
 | 
					+@@ -1254,6 +1255,7 @@ static int hostapd_config_check_bss(stru
 | 
				
			||||||
 | 
					+ 	if (full_config && bss->wpa && (bss->wpa_key_mgmt & WPA_KEY_MGMT_PSK) &&
 | 
				
			||||||
 | 
					+ 	    bss->ssid.wpa_psk == NULL && bss->ssid.wpa_passphrase == NULL &&
 | 
				
			||||||
 | 
					+ 	    bss->ssid.wpa_psk_file == NULL &&
 | 
				
			||||||
 | 
					++	    bss->wpa_psk_radius != PSK_RADIUS_DURING_4WAY_HS &&
 | 
				
			||||||
 | 
					+ 	    (bss->wpa_psk_radius != PSK_RADIUS_REQUIRED ||
 | 
				
			||||||
 | 
					+ 	     bss->macaddr_acl != USE_EXTERNAL_RADIUS_AUTH)) {
 | 
				
			||||||
 | 
					+ 		wpa_printf(MSG_ERROR, "WPA-PSK enabled, but PSK or passphrase "
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/ap_config.h
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/ap_config.h
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/ap_config.h
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * hostapd / Configuration definitions and helpers functions
 | 
				
			||||||
 | 
					+- * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -369,7 +369,8 @@ struct hostapd_bss_config {
 | 
				
			||||||
 | 
					+ 	enum {
 | 
				
			||||||
 | 
					+ 		PSK_RADIUS_IGNORED = 0,
 | 
				
			||||||
 | 
					+ 		PSK_RADIUS_ACCEPTED = 1,
 | 
				
			||||||
 | 
					+-		PSK_RADIUS_REQUIRED = 2
 | 
				
			||||||
 | 
					++		PSK_RADIUS_REQUIRED = 2,
 | 
				
			||||||
 | 
					++		PSK_RADIUS_DURING_4WAY_HS = 3,
 | 
				
			||||||
 | 
					+ 	} wpa_psk_radius;
 | 
				
			||||||
 | 
					+ 	int wpa_pairwise;
 | 
				
			||||||
 | 
					+ 	int group_cipher; /* wpa_group value override from configuation */
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/ieee802_11.c
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11.c
 | 
				
			||||||
 | 
					+@@ -2315,9 +2315,8 @@ static int ieee802_11_allowed_address(st
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-static int
 | 
				
			||||||
 | 
					+-ieee802_11_set_radius_info(struct hostapd_data *hapd, struct sta_info *sta,
 | 
				
			||||||
 | 
					+-			   int res, struct radius_sta *info)
 | 
				
			||||||
 | 
					++int ieee802_11_set_radius_info(struct hostapd_data *hapd, struct sta_info *sta,
 | 
				
			||||||
 | 
					++			       int res, struct radius_sta *info)
 | 
				
			||||||
 | 
					+ {
 | 
				
			||||||
 | 
					+ 	u32 session_timeout = info->session_timeout;
 | 
				
			||||||
 | 
					+ 	u32 acct_interim_interval = info->acct_interim_interval;
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11.h
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/ieee802_11.h
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11.h
 | 
				
			||||||
 | 
					+@@ -196,5 +196,7 @@ void auth_sae_process_commit(void *eloop
 | 
				
			||||||
 | 
					+ u8 * hostapd_eid_rsnxe(struct hostapd_data *hapd, u8 *eid, size_t len);
 | 
				
			||||||
 | 
					+ size_t hostapd_eid_rnr_len(struct hostapd_data *hapd, u32 type);
 | 
				
			||||||
 | 
					+ u8 * hostapd_eid_rnr(struct hostapd_data *hapd, u8 *eid, u32 type);
 | 
				
			||||||
 | 
					++int ieee802_11_set_radius_info(struct hostapd_data *hapd, struct sta_info *sta,
 | 
				
			||||||
 | 
					++                               int res, struct radius_sta *info);
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ #endif /* IEEE802_11_H */
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * hostapd / IEEE 802.11 authentication (ACL)
 | 
				
			||||||
 | 
					+- * Copyright (c) 2003-2012, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -20,6 +20,8 @@
 | 
				
			||||||
 | 
					+ #include "hostapd.h"
 | 
				
			||||||
 | 
					+ #include "ap_config.h"
 | 
				
			||||||
 | 
					+ #include "ap_drv_ops.h"
 | 
				
			||||||
 | 
					++#include "sta_info.h"
 | 
				
			||||||
 | 
					++#include "wpa_auth.h"
 | 
				
			||||||
 | 
					+ #include "ieee802_11.h"
 | 
				
			||||||
 | 
					+ #include "ieee802_1x.h"
 | 
				
			||||||
 | 
					+ #include "ieee802_11_auth.h"
 | 
				
			||||||
 | 
					+@@ -43,6 +45,8 @@ struct hostapd_acl_query_data {
 | 
				
			||||||
 | 
					+ 	u8 *auth_msg; /* IEEE 802.11 authentication frame from station */
 | 
				
			||||||
 | 
					+ 	size_t auth_msg_len;
 | 
				
			||||||
 | 
					+ 	struct hostapd_acl_query_data *next;
 | 
				
			||||||
 | 
					++	bool radius_psk;
 | 
				
			||||||
 | 
					++	int akm;
 | 
				
			||||||
 | 
					+ };
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+@@ -153,6 +157,13 @@ static int hostapd_radius_acl_query(stru
 | 
				
			||||||
 | 
					+ 		goto fail;
 | 
				
			||||||
 | 
					+ 	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++	if (query->akm &&
 | 
				
			||||||
 | 
					++	    !radius_msg_add_attr_int32(msg, RADIUS_ATTR_WLAN_AKM_SUITE,
 | 
				
			||||||
 | 
					++				       wpa_akm_to_suite(query->akm))) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG, "Could not add WLAN-AKM-Suite");
 | 
				
			||||||
 | 
					++		goto fail;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ 	if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, addr) < 0)
 | 
				
			||||||
 | 
					+ 		goto fail;
 | 
				
			||||||
 | 
					+ 	return 0;
 | 
				
			||||||
 | 
					+@@ -557,17 +568,40 @@ hostapd_acl_recv_radius(struct radius_ms
 | 
				
			||||||
 | 
					+ 	cache->next = hapd->acl_cache;
 | 
				
			||||||
 | 
					+ 	hapd->acl_cache = cache;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++	if (query->radius_psk) {
 | 
				
			||||||
 | 
					++		struct sta_info *sta;
 | 
				
			||||||
 | 
					++		bool success = cache->accepted == HOSTAPD_ACL_ACCEPT;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++		sta = ap_get_sta(hapd, query->addr);
 | 
				
			||||||
 | 
					++		if (!sta || !sta->wpa_sm) {
 | 
				
			||||||
 | 
					++			wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					++				   "No STA/SM entry found for the RADIUS PSK response");
 | 
				
			||||||
 | 
					++			goto done;
 | 
				
			||||||
 | 
					++		}
 | 
				
			||||||
 | 
					++#ifdef NEED_AP_MLME
 | 
				
			||||||
 | 
					++		if (success &&
 | 
				
			||||||
 | 
					++		    (ieee802_11_set_radius_info(hapd, sta, cache->accepted,
 | 
				
			||||||
 | 
					++						info) < 0 ||
 | 
				
			||||||
 | 
					++		     ap_sta_bind_vlan(hapd, sta) < 0))
 | 
				
			||||||
 | 
					++			success = false;
 | 
				
			||||||
 | 
					++#endif /* NEED_AP_MLME */
 | 
				
			||||||
 | 
					++		wpa_auth_sta_radius_psk_resp(sta->wpa_sm, success);
 | 
				
			||||||
 | 
					++	} else {
 | 
				
			||||||
 | 
					+ #ifdef CONFIG_DRIVER_RADIUS_ACL
 | 
				
			||||||
 | 
					+-	hostapd_drv_set_radius_acl_auth(hapd, query->addr, cache->accepted,
 | 
				
			||||||
 | 
					+-					info->session_timeout);
 | 
				
			||||||
 | 
					++		hostapd_drv_set_radius_acl_auth(hapd, query->addr,
 | 
				
			||||||
 | 
					++						cache->accepted,
 | 
				
			||||||
 | 
					++						info->session_timeout);
 | 
				
			||||||
 | 
					+ #else /* CONFIG_DRIVER_RADIUS_ACL */
 | 
				
			||||||
 | 
					+ #ifdef NEED_AP_MLME
 | 
				
			||||||
 | 
					+-	/* Re-send original authentication frame for 802.11 processing */
 | 
				
			||||||
 | 
					+-	wpa_printf(MSG_DEBUG, "Re-sending authentication frame after "
 | 
				
			||||||
 | 
					+-		   "successful RADIUS ACL query");
 | 
				
			||||||
 | 
					+-	ieee802_11_mgmt(hapd, query->auth_msg, query->auth_msg_len, NULL);
 | 
				
			||||||
 | 
					++		/* Re-send original authentication frame for 802.11 processing
 | 
				
			||||||
 | 
					++		 */
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					++			   "Re-sending authentication frame after successful RADIUS ACL query");
 | 
				
			||||||
 | 
					++		ieee802_11_mgmt(hapd, query->auth_msg, query->auth_msg_len,
 | 
				
			||||||
 | 
					++				NULL);
 | 
				
			||||||
 | 
					+ #endif /* NEED_AP_MLME */
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_DRIVER_RADIUS_ACL */
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+  done:
 | 
				
			||||||
 | 
					+ 	if (prev == NULL)
 | 
				
			||||||
 | 
					+@@ -649,3 +683,31 @@ void hostapd_free_psk_list(struct hostap
 | 
				
			||||||
 | 
					+ 		os_free(prev);
 | 
				
			||||||
 | 
					+ 	}
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++#ifndef CONFIG_NO_RADIUS
 | 
				
			||||||
 | 
					++void hostapd_acl_req_radius_psk(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					++				int key_mgmt, const u8 *anonce,
 | 
				
			||||||
 | 
					++				const u8 *eapol, size_t eapol_len)
 | 
				
			||||||
 | 
					++{
 | 
				
			||||||
 | 
					++	struct hostapd_acl_query_data *query;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	query = os_zalloc(sizeof(*query));
 | 
				
			||||||
 | 
					++	if (!query)
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	query->radius_psk = true;
 | 
				
			||||||
 | 
					++	query->akm = key_mgmt;
 | 
				
			||||||
 | 
					++	os_get_reltime(&query->timestamp);
 | 
				
			||||||
 | 
					++	os_memcpy(query->addr, addr, ETH_ALEN);
 | 
				
			||||||
 | 
					++	if (hostapd_radius_acl_query(hapd, addr, query)) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					++			   "Failed to send Access-Request for RADIUS PSK/ACL query");
 | 
				
			||||||
 | 
					++		hostapd_acl_query_free(query);
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	query->next = hapd->acl_queries;
 | 
				
			||||||
 | 
					++	hapd->acl_queries = query;
 | 
				
			||||||
 | 
					++}
 | 
				
			||||||
 | 
					++#endif /* CONFIG_NO_RADIUS */
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11_auth.h
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/ieee802_11_auth.h
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/ieee802_11_auth.h
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * hostapd / IEEE 802.11 authentication (ACL)
 | 
				
			||||||
 | 
					+- * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2003-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -36,5 +36,8 @@ void hostapd_free_psk_list(struct hostap
 | 
				
			||||||
 | 
					+ void hostapd_acl_expire(struct hostapd_data *hapd);
 | 
				
			||||||
 | 
					+ void hostapd_copy_psk_list(struct hostapd_sta_wpa_psk_short **psk,
 | 
				
			||||||
 | 
					+ 			   struct hostapd_sta_wpa_psk_short *src);
 | 
				
			||||||
 | 
					++void hostapd_acl_req_radius_psk(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					++				int key_mgmt, const u8 *anonce,
 | 
				
			||||||
 | 
					++				const u8 *eapol, size_t eapol_len);
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ #endif /* IEEE802_11_AUTH_H */
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/wpa_auth.c
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth.c
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * IEEE 802.11 RSN / WPA Authenticator
 | 
				
			||||||
 | 
					+- * Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2004-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -1481,6 +1481,12 @@ static void wpa_send_eapol_timeout(void
 | 
				
			||||||
 | 
					+ 	struct wpa_authenticator *wpa_auth = eloop_ctx;
 | 
				
			||||||
 | 
					+ 	struct wpa_state_machine *sm = timeout_ctx;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++	if (sm->waiting_radius_psk) {
 | 
				
			||||||
 | 
					++		wpa_auth_logger(wpa_auth, sm->addr, LOGGER_DEBUG,
 | 
				
			||||||
 | 
					++				"Ignore EAPOL-Key timeout while waiting for RADIUS PSK");
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ 	sm->pending_1_of_4_timeout = 0;
 | 
				
			||||||
 | 
					+ 	wpa_auth_logger(wpa_auth, sm->addr, LOGGER_DEBUG, "EAPOL-Key timeout");
 | 
				
			||||||
 | 
					+ 	sm->TimeoutEvt = true;
 | 
				
			||||||
 | 
					+@@ -3017,6 +3023,19 @@ SM_STATE(WPA_PTK, PTKCALCNEGOTIATING)
 | 
				
			||||||
 | 
					+ 			break;
 | 
				
			||||||
 | 
					+ 	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++	if (!ok && wpa_key_mgmt_wpa_psk_no_sae(sm->wpa_key_mgmt) &&
 | 
				
			||||||
 | 
					++	    wpa_auth->conf.radius_psk && wpa_auth->cb->request_radius_psk &&
 | 
				
			||||||
 | 
					++	    !sm->waiting_radius_psk) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG, "No PSK available - ask RADIUS server");
 | 
				
			||||||
 | 
					++		wpa_auth->cb->request_radius_psk(wpa_auth->cb_ctx, sm->addr,
 | 
				
			||||||
 | 
					++						 sm->wpa_key_mgmt,
 | 
				
			||||||
 | 
					++						 sm->ANonce,
 | 
				
			||||||
 | 
					++						 sm->last_rx_eapol_key,
 | 
				
			||||||
 | 
					++						 sm->last_rx_eapol_key_len);
 | 
				
			||||||
 | 
					++		sm->waiting_radius_psk = 1;
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ 	if (!ok) {
 | 
				
			||||||
 | 
					+ 		wpa_auth_logger(sm->wpa_auth, sm->addr, LOGGER_DEBUG,
 | 
				
			||||||
 | 
					+ 				"invalid MIC in msg 2/4 of 4-Way Handshake");
 | 
				
			||||||
 | 
					+@@ -3774,6 +3793,11 @@ SM_STEP(WPA_PTK)
 | 
				
			||||||
 | 
					+ 		} else if (wpa_auth_uses_sae(sm) && sm->pmksa) {
 | 
				
			||||||
 | 
					+ 			SM_ENTER(WPA_PTK, PTKSTART);
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_SAE */
 | 
				
			||||||
 | 
					++		} else if (wpa_key_mgmt_wpa_psk_no_sae(sm->wpa_key_mgmt) &&
 | 
				
			||||||
 | 
					++			   wpa_auth->conf.radius_psk) {
 | 
				
			||||||
 | 
					++			wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					++				   "INITPSK: No PSK yet available for STA - use RADIUS later");
 | 
				
			||||||
 | 
					++			SM_ENTER(WPA_PTK, PTKSTART);
 | 
				
			||||||
 | 
					+ 		} else {
 | 
				
			||||||
 | 
					+ 			wpa_auth_logger(wpa_auth, sm->addr, LOGGER_INFO,
 | 
				
			||||||
 | 
					+ 					"no PSK configured for the STA");
 | 
				
			||||||
 | 
					+@@ -5688,3 +5712,28 @@ void wpa_auth_set_ocv_override_freq(stru
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_TESTING_OPTIONS */
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++void wpa_auth_sta_radius_psk_resp(struct wpa_state_machine *sm, bool success)
 | 
				
			||||||
 | 
					++{
 | 
				
			||||||
 | 
					++	if (!sm->waiting_radius_psk) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					++			   "Ignore RADIUS PSK response for " MACSTR
 | 
				
			||||||
 | 
					++			   " that did not wait one",
 | 
				
			||||||
 | 
					++			   MAC2STR(sm->addr));
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	wpa_printf(MSG_DEBUG, "RADIUS PSK response for " MACSTR " (%s)",
 | 
				
			||||||
 | 
					++		   MAC2STR(sm->addr), success ? "success" : "fail");
 | 
				
			||||||
 | 
					++	sm->waiting_radius_psk = 0;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	if (success) {
 | 
				
			||||||
 | 
					++		/* Try to process the EAPOL-Key msg 2/4 again */
 | 
				
			||||||
 | 
					++		sm->EAPOLKeyReceived = true;
 | 
				
			||||||
 | 
					++	} else {
 | 
				
			||||||
 | 
					++		sm->Disconnect = true;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	eloop_register_timeout(0, 0, wpa_sm_call_step, sm, NULL);
 | 
				
			||||||
 | 
					++}
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth.h
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/wpa_auth.h
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth.h
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * hostapd - IEEE 802.11i-2004 / WPA Authenticator
 | 
				
			||||||
 | 
					+- * Copyright (c) 2004-2017, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2004-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -273,6 +273,8 @@ struct wpa_auth_config {
 | 
				
			||||||
 | 
					+ 	 * PTK derivation regardless of advertised capabilities.
 | 
				
			||||||
 | 
					+ 	 */
 | 
				
			||||||
 | 
					+ 	bool force_kdk_derivation;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	bool radius_psk;
 | 
				
			||||||
 | 
					+ };
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ typedef enum {
 | 
				
			||||||
 | 
					+@@ -320,6 +322,9 @@ struct wpa_auth_callbacks {
 | 
				
			||||||
 | 
					+ 	void (*store_ptksa)(void *ctx, const u8 *addr, int cipher,
 | 
				
			||||||
 | 
					+ 			    u32 life_time, const struct wpa_ptk *ptk);
 | 
				
			||||||
 | 
					+ 	void (*clear_ptksa)(void *ctx, const u8 *addr, int cipher);
 | 
				
			||||||
 | 
					++	void (*request_radius_psk)(void *ctx, const u8 *addr, int key_mgmt,
 | 
				
			||||||
 | 
					++				   const u8 *anonce,
 | 
				
			||||||
 | 
					++				   const u8 *eapol, size_t eapol_len);
 | 
				
			||||||
 | 
					+ #ifdef CONFIG_IEEE80211R_AP
 | 
				
			||||||
 | 
					+ 	struct wpa_state_machine * (*add_sta)(void *ctx, const u8 *sta_addr);
 | 
				
			||||||
 | 
					+ 	int (*add_sta_ft)(void *ctx, const u8 *sta_addr);
 | 
				
			||||||
 | 
					+@@ -572,4 +577,6 @@ void wpa_auth_set_ocv_override_freq(stru
 | 
				
			||||||
 | 
					+ 				    enum wpa_auth_ocv_override_frame frame,
 | 
				
			||||||
 | 
					+ 				    unsigned int freq);
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++void wpa_auth_sta_radius_psk_resp(struct wpa_state_machine *sm, bool success);
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ #endif /* WPA_AUTH_H */
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth_glue.c
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/wpa_auth_glue.c
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth_glue.c
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * hostapd / WPA authenticator glue code
 | 
				
			||||||
 | 
					+- * Copyright (c) 2002-2012, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2002-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -29,6 +29,7 @@
 | 
				
			||||||
 | 
					+ #include "ap_drv_ops.h"
 | 
				
			||||||
 | 
					+ #include "ap_config.h"
 | 
				
			||||||
 | 
					+ #include "ieee802_11.h"
 | 
				
			||||||
 | 
					++#include "ieee802_11_auth.h"
 | 
				
			||||||
 | 
					+ #include "pmksa_cache_auth.h"
 | 
				
			||||||
 | 
					+ #include "wpa_auth.h"
 | 
				
			||||||
 | 
					+ #include "wpa_auth_glue.h"
 | 
				
			||||||
 | 
					+@@ -214,6 +215,8 @@ static void hostapd_wpa_auth_conf(struct
 | 
				
			||||||
 | 
					+ 	wconf->force_kdk_derivation = conf->force_kdk_derivation;
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_TESTING_OPTIONS */
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_PASN */
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	wconf->radius_psk = conf->wpa_psk_radius == PSK_RADIUS_DURING_4WAY_HS;
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+@@ -1444,6 +1447,23 @@ static void hostapd_wpa_unregister_ft_ou
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_IEEE80211R_AP */
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++#ifndef CONFIG_NO_RADIUS
 | 
				
			||||||
 | 
					++static void hostapd_request_radius_psk(void *ctx, const u8 *addr, int key_mgmt,
 | 
				
			||||||
 | 
					++				       const u8 *anonce,
 | 
				
			||||||
 | 
					++				       const u8 *eapol, size_t eapol_len)
 | 
				
			||||||
 | 
					++{
 | 
				
			||||||
 | 
					++	struct hostapd_data *hapd = ctx;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	wpa_printf(MSG_DEBUG, "RADIUS PSK request for " MACSTR " key_mgmt=0x%x",
 | 
				
			||||||
 | 
					++		   MAC2STR(addr), key_mgmt);
 | 
				
			||||||
 | 
					++	wpa_hexdump(MSG_DEBUG, "ANonce", anonce, WPA_NONCE_LEN);
 | 
				
			||||||
 | 
					++	wpa_hexdump(MSG_DEBUG, "EAPOL", eapol, eapol_len);
 | 
				
			||||||
 | 
					++	hostapd_acl_req_radius_psk(hapd, addr, key_mgmt, anonce, eapol,
 | 
				
			||||||
 | 
					++				   eapol_len);
 | 
				
			||||||
 | 
					++}
 | 
				
			||||||
 | 
					++#endif /* CONFIG_NO_RADIUS */
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ int hostapd_setup_wpa(struct hostapd_data *hapd)
 | 
				
			||||||
 | 
					+ {
 | 
				
			||||||
 | 
					+ 	struct wpa_auth_config _conf;
 | 
				
			||||||
 | 
					+@@ -1487,6 +1507,9 @@ int hostapd_setup_wpa(struct hostapd_dat
 | 
				
			||||||
 | 
					+ 		.set_session_timeout = hostapd_wpa_auth_set_session_timeout,
 | 
				
			||||||
 | 
					+ 		.get_session_timeout = hostapd_wpa_auth_get_session_timeout,
 | 
				
			||||||
 | 
					+ #endif /* CONFIG_IEEE80211R_AP */
 | 
				
			||||||
 | 
					++#ifndef CONFIG_NO_RADIUS
 | 
				
			||||||
 | 
					++		.request_radius_psk = hostapd_request_radius_psk,
 | 
				
			||||||
 | 
					++#endif /* CONFIG_NO_RADIUS */
 | 
				
			||||||
 | 
					+ 	};
 | 
				
			||||||
 | 
					+ 	const u8 *wpa_ie;
 | 
				
			||||||
 | 
					+ 	size_t wpa_ie_len;
 | 
				
			||||||
 | 
					+Index: hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth_i.h
 | 
				
			||||||
 | 
					+===================================================================
 | 
				
			||||||
 | 
					+--- hostapd-2022-01-16-cff80b4f.orig/src/ap/wpa_auth_i.h
 | 
				
			||||||
 | 
					++++ hostapd-2022-01-16-cff80b4f/src/ap/wpa_auth_i.h
 | 
				
			||||||
 | 
					+@@ -89,6 +89,7 @@ struct wpa_state_machine {
 | 
				
			||||||
 | 
					+ 	unsigned int rx_eapol_key_secure:1;
 | 
				
			||||||
 | 
					+ 	unsigned int update_snonce:1;
 | 
				
			||||||
 | 
					+ 	unsigned int alt_snonce_valid:1;
 | 
				
			||||||
 | 
					++	unsigned int waiting_radius_psk:1;
 | 
				
			||||||
 | 
					+ #ifdef CONFIG_IEEE80211R_AP
 | 
				
			||||||
 | 
					+ 	unsigned int ft_completed:1;
 | 
				
			||||||
 | 
					+ 	unsigned int pmk_r1_name_valid:1;
 | 
				
			||||||
 | 
					diff --git a/package/network/services/hostapd/patches/n00-002-RADIUS-Attributes-with-Extended-Types-RFC-6929.patch b/package/network/services/hostapd/patches/n00-002-RADIUS-Attributes-with-Extended-Types-RFC-6929.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..eef9117176
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/package/network/services/hostapd/patches/n00-002-RADIUS-Attributes-with-Extended-Types-RFC-6929.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,350 @@
 | 
				
			||||||
 | 
					+From 24763e3cd0a564eb71f3c501bbb4fbb0d7070762 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					+From: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+Date: Fri, 15 Apr 2022 17:31:48 +0300
 | 
				
			||||||
 | 
					+Subject: [PATCH] RADIUS: Attributes with Extended Types (RFC 6929)
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Supported extended types for RADIUS attributes for the cases defined in
 | 
				
			||||||
 | 
					+RFC 6929.
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Signed-off-by: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+---
 | 
				
			||||||
 | 
					+ src/radius/radius.c | 195 ++++++++++++++++++++++++++++++++++++++------
 | 
				
			||||||
 | 
					+ src/radius/radius.h |  26 +++++-
 | 
				
			||||||
 | 
					+ 2 files changed, 193 insertions(+), 28 deletions(-)
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+diff --git a/src/radius/radius.c b/src/radius/radius.c
 | 
				
			||||||
 | 
					+index be16e27b9..a64228067 100644
 | 
				
			||||||
 | 
					+--- a/src/radius/radius.c
 | 
				
			||||||
 | 
					++++ b/src/radius/radius.c
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * RADIUS message processing
 | 
				
			||||||
 | 
					+- * Copyright (c) 2002-2009, 2011-2015, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2002-2009, 2011-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -159,7 +159,8 @@ static const char *radius_code_string(u8 code)
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ struct radius_attr_type {
 | 
				
			||||||
 | 
					+-	u8 type;
 | 
				
			||||||
 | 
					++	u16 type; /* 0..255 for basic types;
 | 
				
			||||||
 | 
					++		   * (241 << 8) | <ext-type> for extended types */
 | 
				
			||||||
 | 
					+ 	char *name;
 | 
				
			||||||
 | 
					+ 	enum {
 | 
				
			||||||
 | 
					+ 		RADIUS_ATTR_UNDIST, RADIUS_ATTR_TEXT, RADIUS_ATTR_IP,
 | 
				
			||||||
 | 
					+@@ -260,11 +261,31 @@ static const struct radius_attr_type radius_attrs[] =
 | 
				
			||||||
 | 
					+ 	  RADIUS_ATTR_HEXDUMP },
 | 
				
			||||||
 | 
					+ 	{ RADIUS_ATTR_WLAN_GROUP_MGMT_CIPHER, "WLAN-Group-Mgmt-Pairwise-Cipher",
 | 
				
			||||||
 | 
					+ 	  RADIUS_ATTR_HEXDUMP },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_TYPE_1, "Extended-Type-1", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_TYPE_2, "Extended-Type-2", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_TYPE_3, "Extended-Type-3", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_TYPE_4, "Extended-Type-4", RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_LONG_EXT_TYPE_1, "Long-Extended-Type-1",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_LONG_EXT_TYPE_2, "Long-Extended-Type-2",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_1, "Extended-Vendor-Specific-1",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_2, "Extended-Vendor-Specific-2",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_3, "Extended-Vendor-Specific-3",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_4, "Extended-Vendor-Specific-4",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5, "Extended-Vendor-Specific-5",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					++	{ RADIUS_ATTR_EXT_VENDOR_SPECIFIC_6, "Extended-Vendor-Specific-6",
 | 
				
			||||||
 | 
					++	  RADIUS_ATTR_UNDIST },
 | 
				
			||||||
 | 
					+ };
 | 
				
			||||||
 | 
					+ #define RADIUS_ATTRS ARRAY_SIZE(radius_attrs)
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-static const struct radius_attr_type *radius_get_attr_type(u8 type)
 | 
				
			||||||
 | 
					++static const struct radius_attr_type * radius_get_attr_type(u16 type)
 | 
				
			||||||
 | 
					+ {
 | 
				
			||||||
 | 
					+ 	size_t i;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+@@ -277,23 +298,60 @@ static const struct radius_attr_type *radius_get_attr_type(u8 type)
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++static bool radius_is_long_ext_type(u8 type)
 | 
				
			||||||
 | 
					++{
 | 
				
			||||||
 | 
					++	return type == RADIUS_ATTR_LONG_EXT_TYPE_1 ||
 | 
				
			||||||
 | 
					++		type == RADIUS_ATTR_LONG_EXT_TYPE_2;
 | 
				
			||||||
 | 
					++}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++static bool radius_is_ext_type(u8 type)
 | 
				
			||||||
 | 
					++{
 | 
				
			||||||
 | 
					++	return type >= RADIUS_ATTR_EXT_TYPE_1 &&
 | 
				
			||||||
 | 
					++		type <= RADIUS_ATTR_LONG_EXT_TYPE_2;
 | 
				
			||||||
 | 
					++}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ static void radius_msg_dump_attr(struct radius_attr_hdr *hdr)
 | 
				
			||||||
 | 
					+ {
 | 
				
			||||||
 | 
					++	struct radius_attr_hdr_ext *ext = NULL;
 | 
				
			||||||
 | 
					+ 	const struct radius_attr_type *attr;
 | 
				
			||||||
 | 
					+ 	int len;
 | 
				
			||||||
 | 
					+ 	unsigned char *pos;
 | 
				
			||||||
 | 
					+ 	char buf[1000];
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	attr = radius_get_attr_type(hdr->type);
 | 
				
			||||||
 | 
					++	if (hdr->length < sizeof(struct radius_attr_hdr))
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	wpa_printf(MSG_INFO, "   Attribute %d (%s) length=%d",
 | 
				
			||||||
 | 
					+-		   hdr->type, attr ? attr->name : "?Unknown?", hdr->length);
 | 
				
			||||||
 | 
					++	if (radius_is_ext_type(hdr->type)) {
 | 
				
			||||||
 | 
					++		if (hdr->length < 4) {
 | 
				
			||||||
 | 
					++			wpa_printf(MSG_INFO,
 | 
				
			||||||
 | 
					++				   "   Invalid attribute %d (too short for extended type)",
 | 
				
			||||||
 | 
					++				hdr->type);
 | 
				
			||||||
 | 
					++			return;
 | 
				
			||||||
 | 
					++		}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	if (attr == NULL || hdr->length < sizeof(struct radius_attr_hdr))
 | 
				
			||||||
 | 
					+-		return;
 | 
				
			||||||
 | 
					++		ext = (struct radius_attr_hdr_ext *) hdr;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	if (ext) {
 | 
				
			||||||
 | 
					++		attr = radius_get_attr_type((ext->type << 8) | ext->ext_type);
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_INFO, "   Attribute %d.%d (%s) length=%d",
 | 
				
			||||||
 | 
					++			   ext->type, ext->ext_type,
 | 
				
			||||||
 | 
					++			   attr ? attr->name : "?Unknown?", ext->length);
 | 
				
			||||||
 | 
					++		pos = (unsigned char *) (ext + 1);
 | 
				
			||||||
 | 
					++		len = ext->length - sizeof(struct radius_attr_hdr_ext);
 | 
				
			||||||
 | 
					++	} else {
 | 
				
			||||||
 | 
					++		attr = radius_get_attr_type(hdr->type);
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_INFO, "   Attribute %d (%s) length=%d",
 | 
				
			||||||
 | 
					++			   hdr->type, attr ? attr->name : "?Unknown?",
 | 
				
			||||||
 | 
					++			   hdr->length);
 | 
				
			||||||
 | 
					++		pos = (unsigned char *) (hdr + 1);
 | 
				
			||||||
 | 
					++		len = hdr->length - sizeof(struct radius_attr_hdr);
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	len = hdr->length - sizeof(struct radius_attr_hdr);
 | 
				
			||||||
 | 
					+-	pos = (unsigned char *) (hdr + 1);
 | 
				
			||||||
 | 
					++	if (!attr)
 | 
				
			||||||
 | 
					++		return;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 	switch (attr->data_type) {
 | 
				
			||||||
 | 
					+ 	case RADIUS_ATTR_TEXT:
 | 
				
			||||||
 | 
					+@@ -627,22 +685,54 @@ static int radius_msg_add_attr_to_array(struct radius_msg *msg,
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-struct radius_attr_hdr *radius_msg_add_attr(struct radius_msg *msg, u8 type,
 | 
				
			||||||
 | 
					+-					    const u8 *data, size_t data_len)
 | 
				
			||||||
 | 
					++struct radius_attr_hdr * radius_msg_add_attr(struct radius_msg *msg, u16 type,
 | 
				
			||||||
 | 
					++					     const u8 *data, size_t data_len)
 | 
				
			||||||
 | 
					+ {
 | 
				
			||||||
 | 
					+-	size_t buf_needed;
 | 
				
			||||||
 | 
					+-	struct radius_attr_hdr *attr;
 | 
				
			||||||
 | 
					++	size_t buf_needed, max_len;
 | 
				
			||||||
 | 
					++	struct radius_attr_hdr *attr = NULL;
 | 
				
			||||||
 | 
					++	struct radius_attr_hdr_ext *ext;
 | 
				
			||||||
 | 
					++	u8 ext_type = 0;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 	if (TEST_FAIL())
 | 
				
			||||||
 | 
					+ 		return NULL;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	if (data_len > RADIUS_MAX_ATTR_LEN) {
 | 
				
			||||||
 | 
					+-		wpa_printf(MSG_ERROR, "radius_msg_add_attr: too long attribute (%lu bytes)",
 | 
				
			||||||
 | 
					+-		       (unsigned long) data_len);
 | 
				
			||||||
 | 
					+-		return NULL;
 | 
				
			||||||
 | 
					++	if (type > 255) {
 | 
				
			||||||
 | 
					++		if (!radius_is_ext_type(type >> 8)) {
 | 
				
			||||||
 | 
					++			wpa_printf(MSG_ERROR,
 | 
				
			||||||
 | 
					++				   "%s: Undefined extended type %d.%d",
 | 
				
			||||||
 | 
					++				   __func__, type >> 8, type & 0xff);
 | 
				
			||||||
 | 
					++			return NULL;
 | 
				
			||||||
 | 
					++		}
 | 
				
			||||||
 | 
					++		ext_type = type & 0xff;
 | 
				
			||||||
 | 
					++		type >>= 8;
 | 
				
			||||||
 | 
					++	} else if (radius_is_ext_type(type)) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_ERROR, "%s: Unexpected extended type use for %d",
 | 
				
			||||||
 | 
					++			   __func__, type);
 | 
				
			||||||
 | 
					+ 	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	buf_needed = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					++	if (radius_is_long_ext_type(type)) {
 | 
				
			||||||
 | 
					++		size_t hdr_len = sizeof(struct radius_attr_hdr_ext) + 1;
 | 
				
			||||||
 | 
					++		size_t plen = 255 - hdr_len;
 | 
				
			||||||
 | 
					++		size_t num;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++		max_len = 4096;
 | 
				
			||||||
 | 
					++		num = (data_len + plen - 1) / plen;
 | 
				
			||||||
 | 
					++		if (num == 0)
 | 
				
			||||||
 | 
					++			num = 1;
 | 
				
			||||||
 | 
					++		buf_needed = num * hdr_len + data_len;
 | 
				
			||||||
 | 
					++	} else if (radius_is_ext_type(type)) {
 | 
				
			||||||
 | 
					++		max_len = RADIUS_MAX_EXT_ATTR_LEN;
 | 
				
			||||||
 | 
					++		buf_needed = sizeof(struct radius_attr_hdr_ext) + data_len;
 | 
				
			||||||
 | 
					++	} else {
 | 
				
			||||||
 | 
					++		max_len = RADIUS_MAX_ATTR_LEN;
 | 
				
			||||||
 | 
					++		buf_needed = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++	if (data_len > max_len) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_ERROR,
 | 
				
			||||||
 | 
					++			   "%s: too long attribute (%zu > %zu bytes)",
 | 
				
			||||||
 | 
					++			   __func__, data_len, max_len);
 | 
				
			||||||
 | 
					++		return NULL;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 	if (wpabuf_tailroom(msg->buf) < buf_needed) {
 | 
				
			||||||
 | 
					+ 		/* allocate more space for message buffer */
 | 
				
			||||||
 | 
					+@@ -651,13 +741,44 @@ struct radius_attr_hdr *radius_msg_add_attr(struct radius_msg *msg, u8 type,
 | 
				
			||||||
 | 
					+ 		msg->hdr = wpabuf_mhead(msg->buf);
 | 
				
			||||||
 | 
					+ 	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+-	attr = wpabuf_put(msg->buf, sizeof(struct radius_attr_hdr));
 | 
				
			||||||
 | 
					+-	attr->type = type;
 | 
				
			||||||
 | 
					+-	attr->length = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					+-	wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					+-
 | 
				
			||||||
 | 
					+-	if (radius_msg_add_attr_to_array(msg, attr))
 | 
				
			||||||
 | 
					+-		return NULL;
 | 
				
			||||||
 | 
					++	if (radius_is_long_ext_type(type)) {
 | 
				
			||||||
 | 
					++		size_t plen = 255 - sizeof(struct radius_attr_hdr_ext) - 1;
 | 
				
			||||||
 | 
					++		size_t alen;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++		do {
 | 
				
			||||||
 | 
					++			alen = data_len > plen ? plen : data_len;
 | 
				
			||||||
 | 
					++			ext = wpabuf_put(msg->buf,
 | 
				
			||||||
 | 
					++					 sizeof(struct radius_attr_hdr_ext));
 | 
				
			||||||
 | 
					++			if (!attr)
 | 
				
			||||||
 | 
					++				attr = (struct radius_attr_hdr *) ext;
 | 
				
			||||||
 | 
					++			ext->type = type;
 | 
				
			||||||
 | 
					++			ext->length = sizeof(*ext) + 1 + alen;
 | 
				
			||||||
 | 
					++			ext->ext_type = ext_type;
 | 
				
			||||||
 | 
					++			wpabuf_put_u8(msg->buf, data_len > alen ? 0x80 : 0);
 | 
				
			||||||
 | 
					++			wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					++			data += alen;
 | 
				
			||||||
 | 
					++			data_len -= alen;
 | 
				
			||||||
 | 
					++			if (radius_msg_add_attr_to_array(
 | 
				
			||||||
 | 
					++				    msg, (struct radius_attr_hdr *) ext))
 | 
				
			||||||
 | 
					++				return NULL;
 | 
				
			||||||
 | 
					++		} while (data_len > 0);
 | 
				
			||||||
 | 
					++	} else if (radius_is_ext_type(type)) {
 | 
				
			||||||
 | 
					++		ext = wpabuf_put(msg->buf, sizeof(struct radius_attr_hdr_ext));
 | 
				
			||||||
 | 
					++		attr = (struct radius_attr_hdr *) ext;
 | 
				
			||||||
 | 
					++		ext->type = type;
 | 
				
			||||||
 | 
					++		ext->length = sizeof(*ext) + data_len;
 | 
				
			||||||
 | 
					++		ext->ext_type = ext_type;
 | 
				
			||||||
 | 
					++		wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					++		if (radius_msg_add_attr_to_array(msg, attr))
 | 
				
			||||||
 | 
					++			return NULL;
 | 
				
			||||||
 | 
					++	} else {
 | 
				
			||||||
 | 
					++		attr = wpabuf_put(msg->buf, sizeof(struct radius_attr_hdr));
 | 
				
			||||||
 | 
					++		attr->type = type;
 | 
				
			||||||
 | 
					++		attr->length = sizeof(*attr) + data_len;
 | 
				
			||||||
 | 
					++		wpabuf_put_data(msg->buf, data, data_len);
 | 
				
			||||||
 | 
					++		if (radius_msg_add_attr_to_array(msg, attr))
 | 
				
			||||||
 | 
					++			return NULL;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 	return attr;
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+@@ -1285,6 +1406,28 @@ int radius_msg_add_wfa(struct radius_msg *msg, u8 subtype, const u8 *data,
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++int radius_msg_add_ext_vs(struct radius_msg *msg, u16 type, u32 vendor_id,
 | 
				
			||||||
 | 
					++			  u8 vendor_type, const u8 *data, size_t len)
 | 
				
			||||||
 | 
					++{
 | 
				
			||||||
 | 
					++	struct radius_attr_hdr *attr;
 | 
				
			||||||
 | 
					++	u8 *buf, *pos;
 | 
				
			||||||
 | 
					++	size_t alen;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	alen = 4 + 1 + len;
 | 
				
			||||||
 | 
					++	buf = os_malloc(alen);
 | 
				
			||||||
 | 
					++	if (!buf)
 | 
				
			||||||
 | 
					++		return 0;
 | 
				
			||||||
 | 
					++	pos = buf;
 | 
				
			||||||
 | 
					++	WPA_PUT_BE32(pos, vendor_id);
 | 
				
			||||||
 | 
					++	pos += 4;
 | 
				
			||||||
 | 
					++	*pos++ = vendor_type;
 | 
				
			||||||
 | 
					++	os_memcpy(pos, data, len);
 | 
				
			||||||
 | 
					++	attr = radius_msg_add_attr(msg, type, buf, alen);
 | 
				
			||||||
 | 
					++	os_free(buf);
 | 
				
			||||||
 | 
					++	return attr != NULL;
 | 
				
			||||||
 | 
					++}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ int radius_user_password_hide(struct radius_msg *msg,
 | 
				
			||||||
 | 
					+ 			      const u8 *data, size_t data_len,
 | 
				
			||||||
 | 
					+ 			      const u8 *secret, size_t secret_len,
 | 
				
			||||||
 | 
					+diff --git a/src/radius/radius.h b/src/radius/radius.h
 | 
				
			||||||
 | 
					+index fb8148180..490c8d1f6 100644
 | 
				
			||||||
 | 
					+--- a/src/radius/radius.h
 | 
				
			||||||
 | 
					++++ b/src/radius/radius.h
 | 
				
			||||||
 | 
					+@@ -1,6 +1,6 @@
 | 
				
			||||||
 | 
					+ /*
 | 
				
			||||||
 | 
					+  * RADIUS message processing
 | 
				
			||||||
 | 
					+- * Copyright (c) 2002-2009, 2012, 2014-2015, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					++ * Copyright (c) 2002-2009, 2012, 2014-2022, Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+  *
 | 
				
			||||||
 | 
					+  * This software may be distributed under the terms of the BSD license.
 | 
				
			||||||
 | 
					+  * See README for more details.
 | 
				
			||||||
 | 
					+@@ -46,7 +46,15 @@ struct radius_attr_hdr {
 | 
				
			||||||
 | 
					+ 	/* followed by length-2 octets of attribute value */
 | 
				
			||||||
 | 
					+ } STRUCT_PACKED;
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++struct radius_attr_hdr_ext {
 | 
				
			||||||
 | 
					++	u8 type;
 | 
				
			||||||
 | 
					++	u8 length; /* including this header */
 | 
				
			||||||
 | 
					++	u8 ext_type;
 | 
				
			||||||
 | 
					++	/* followed by length-3 octets of attribute value */
 | 
				
			||||||
 | 
					++} STRUCT_PACKED;
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ #define RADIUS_MAX_ATTR_LEN (255 - sizeof(struct radius_attr_hdr))
 | 
				
			||||||
 | 
					++#define RADIUS_MAX_EXT_ATTR_LEN (255 - sizeof(struct radius_attr_hdr_ext))
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ enum { RADIUS_ATTR_USER_NAME = 1,
 | 
				
			||||||
 | 
					+        RADIUS_ATTR_USER_PASSWORD = 2,
 | 
				
			||||||
 | 
					+@@ -113,6 +121,18 @@ enum { RADIUS_ATTR_USER_NAME = 1,
 | 
				
			||||||
 | 
					+        RADIUS_ATTR_WLAN_GROUP_CIPHER = 187,
 | 
				
			||||||
 | 
					+        RADIUS_ATTR_WLAN_AKM_SUITE = 188,
 | 
				
			||||||
 | 
					+        RADIUS_ATTR_WLAN_GROUP_MGMT_CIPHER = 189,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_TYPE_1 = 241,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_TYPE_2 = 242,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_TYPE_3 = 243,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_TYPE_4 = 244,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_LONG_EXT_TYPE_1 = 245,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_LONG_EXT_TYPE_2 = 246,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_1 = (241 << 8) | 26,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_2 = (242 << 8) | 26,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_3 = (243 << 8) | 26,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_4 = (244 << 8) | 26,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5 = (245 << 8) | 26,
 | 
				
			||||||
 | 
					++       RADIUS_ATTR_EXT_VENDOR_SPECIFIC_6 = (246 << 8) | 26,
 | 
				
			||||||
 | 
					+ };
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+@@ -257,7 +277,7 @@ int radius_msg_verify_acct_req(struct radius_msg *msg, const u8 *secret,
 | 
				
			||||||
 | 
					+ int radius_msg_verify_das_req(struct radius_msg *msg, const u8 *secret,
 | 
				
			||||||
 | 
					+ 			      size_t secret_len,
 | 
				
			||||||
 | 
					+ 			      int require_message_authenticator);
 | 
				
			||||||
 | 
					+-struct radius_attr_hdr * radius_msg_add_attr(struct radius_msg *msg, u8 type,
 | 
				
			||||||
 | 
					++struct radius_attr_hdr * radius_msg_add_attr(struct radius_msg *msg, u16 type,
 | 
				
			||||||
 | 
					+ 					     const u8 *data, size_t data_len);
 | 
				
			||||||
 | 
					+ struct radius_msg * radius_msg_parse(const u8 *data, size_t len);
 | 
				
			||||||
 | 
					+ int radius_msg_add_eap(struct radius_msg *msg, const u8 *data,
 | 
				
			||||||
 | 
					+@@ -284,6 +304,8 @@ int radius_msg_add_mppe_keys(struct radius_msg *msg,
 | 
				
			||||||
 | 
					+ 			     const u8 *recv_key, size_t recv_key_len);
 | 
				
			||||||
 | 
					+ int radius_msg_add_wfa(struct radius_msg *msg, u8 subtype, const u8 *data,
 | 
				
			||||||
 | 
					+ 		       size_t len);
 | 
				
			||||||
 | 
					++int radius_msg_add_ext_vs(struct radius_msg *msg, u16 type, u32 vendor_id,
 | 
				
			||||||
 | 
					++			  u8 vendor_type, const u8 *data, size_t len);
 | 
				
			||||||
 | 
					+ int radius_user_password_hide(struct radius_msg *msg,
 | 
				
			||||||
 | 
					+ 			      const u8 *data, size_t data_len,
 | 
				
			||||||
 | 
					+ 			      const u8 *secret, size_t secret_len,
 | 
				
			||||||
 | 
					+-- 
 | 
				
			||||||
 | 
					+2.25.1
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					diff --git a/package/network/services/hostapd/patches/n00-003-RADIUS-attributes-for-EAPOL-Key-message-details.patch b/package/network/services/hostapd/patches/n00-003-RADIUS-attributes-for-EAPOL-Key-message-details.patch
 | 
				
			||||||
 | 
					new file mode 100644
 | 
				
			||||||
 | 
					index 0000000000..df8baa7856
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/package/network/services/hostapd/patches/n00-003-RADIUS-attributes-for-EAPOL-Key-message-details.patch
 | 
				
			||||||
 | 
					@@ -0,0 +1,102 @@
 | 
				
			||||||
 | 
					+From b94371af8402f60218716552e571ca72cff4e3c0 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					+From: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+Date: Fri, 15 Apr 2022 17:36:25 +0300
 | 
				
			||||||
 | 
					+Subject: [PATCH] RADIUS attributes for EAPOL-Key message details
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Use vendor specific RADIUS attributes for sending ANonce and EAPOL-Key
 | 
				
			||||||
 | 
					+msg 2/4 for the wpa_psk_radius=3 case. The vendor specific attributes
 | 
				
			||||||
 | 
					+for this are defined in FreeRADIUS as follows:
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+BEGIN-VENDOR    FreeRADIUS      format=Extended-Vendor-Specific-5
 | 
				
			||||||
 | 
					+ATTRIBUTE       FreeRADIUS-802.1X-Anonce        1       octets[32]
 | 
				
			||||||
 | 
					+ATTRIBUTE       FreeRADIUS-802.1X-EAPoL-Key-Msg 2       octets
 | 
				
			||||||
 | 
					+END-VENDOR      FreeRADIUS
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+Signed-off-by: Jouni Malinen <j@w1.fi>
 | 
				
			||||||
 | 
					+---
 | 
				
			||||||
 | 
					+ src/ap/ieee802_11_auth.c | 29 +++++++++++++++++++++++++++++
 | 
				
			||||||
 | 
					+ src/radius/radius.h      |  7 +++++++
 | 
				
			||||||
 | 
					+ 2 files changed, 36 insertions(+)
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+diff --git a/src/ap/ieee802_11_auth.c b/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					+index a54d7616e..4277d82cb 100644
 | 
				
			||||||
 | 
					+--- a/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					++++ b/src/ap/ieee802_11_auth.c
 | 
				
			||||||
 | 
					+@@ -47,6 +47,9 @@ struct hostapd_acl_query_data {
 | 
				
			||||||
 | 
					+ 	struct hostapd_acl_query_data *next;
 | 
				
			||||||
 | 
					+ 	bool radius_psk;
 | 
				
			||||||
 | 
					+ 	int akm;
 | 
				
			||||||
 | 
					++	u8 *anonce;
 | 
				
			||||||
 | 
					++	u8 *eapol;
 | 
				
			||||||
 | 
					++	size_t eapol_len;
 | 
				
			||||||
 | 
					+ };
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+@@ -102,6 +105,8 @@ static void hostapd_acl_query_free(struct hostapd_acl_query_data *query)
 | 
				
			||||||
 | 
					+ 	if (!query)
 | 
				
			||||||
 | 
					+ 		return;
 | 
				
			||||||
 | 
					+ 	os_free(query->auth_msg);
 | 
				
			||||||
 | 
					++	os_free(query->anonce);
 | 
				
			||||||
 | 
					++	os_free(query->eapol);
 | 
				
			||||||
 | 
					+ 	os_free(query);
 | 
				
			||||||
 | 
					+ }
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+@@ -164,6 +169,24 @@ static int hostapd_radius_acl_query(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					+ 		goto fail;
 | 
				
			||||||
 | 
					+ 	}
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++	if (query->anonce &&
 | 
				
			||||||
 | 
					++	    !radius_msg_add_ext_vs(msg, RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5,
 | 
				
			||||||
 | 
					++				   RADIUS_VENDOR_ID_FREERADIUS,
 | 
				
			||||||
 | 
					++				   RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_ANONCE,
 | 
				
			||||||
 | 
					++				   query->anonce, WPA_NONCE_LEN)) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG, "Could not add FreeRADIUS-802.1X-Anonce");
 | 
				
			||||||
 | 
					++		goto fail;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					++	if (query->eapol &&
 | 
				
			||||||
 | 
					++	    !radius_msg_add_ext_vs(msg, RADIUS_ATTR_EXT_VENDOR_SPECIFIC_5,
 | 
				
			||||||
 | 
					++				   RADIUS_VENDOR_ID_FREERADIUS,
 | 
				
			||||||
 | 
					++				   RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_EAPOL_KEY_MSG,
 | 
				
			||||||
 | 
					++				   query->eapol, query->eapol_len)) {
 | 
				
			||||||
 | 
					++		wpa_printf(MSG_DEBUG, "Could not add FreeRADIUS-802.1X-EAPoL-Key-Msg");
 | 
				
			||||||
 | 
					++		goto fail;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					++
 | 
				
			||||||
 | 
					+ 	if (radius_client_send(hapd->radius, msg, RADIUS_AUTH, addr) < 0)
 | 
				
			||||||
 | 
					+ 		goto fail;
 | 
				
			||||||
 | 
					+ 	return 0;
 | 
				
			||||||
 | 
					+@@ -703,6 +726,12 @@ void hostapd_acl_req_radius_psk(struct hostapd_data *hapd, const u8 *addr,
 | 
				
			||||||
 | 
					+ 	query->akm = key_mgmt;
 | 
				
			||||||
 | 
					+ 	os_get_reltime(&query->timestamp);
 | 
				
			||||||
 | 
					+ 	os_memcpy(query->addr, addr, ETH_ALEN);
 | 
				
			||||||
 | 
					++	if (anonce)
 | 
				
			||||||
 | 
					++		query->anonce = os_memdup(anonce, WPA_NONCE_LEN);
 | 
				
			||||||
 | 
					++	if (eapol) {
 | 
				
			||||||
 | 
					++		query->eapol = os_memdup(eapol, eapol_len);
 | 
				
			||||||
 | 
					++		query->eapol_len = eapol_len;
 | 
				
			||||||
 | 
					++	}
 | 
				
			||||||
 | 
					+ 	if (hostapd_radius_acl_query(hapd, addr, query)) {
 | 
				
			||||||
 | 
					+ 		wpa_printf(MSG_DEBUG,
 | 
				
			||||||
 | 
					+ 			   "Failed to send Access-Request for RADIUS PSK/ACL query");
 | 
				
			||||||
 | 
					+diff --git a/src/radius/radius.h b/src/radius/radius.h
 | 
				
			||||||
 | 
					+index 490c8d1f6..177c64a66 100644
 | 
				
			||||||
 | 
					+--- a/src/radius/radius.h
 | 
				
			||||||
 | 
					++++ b/src/radius/radius.h
 | 
				
			||||||
 | 
					+@@ -208,6 +208,13 @@ enum { RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY = 16,
 | 
				
			||||||
 | 
					+        RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY = 17
 | 
				
			||||||
 | 
					+ };
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					++/* FreeRADIUS vendor-specific attributes */
 | 
				
			||||||
 | 
					++#define RADIUS_VENDOR_ID_FREERADIUS 11344
 | 
				
			||||||
 | 
					++/* Extended-Vendor-Specific-5 (245.26; long extended header) */
 | 
				
			||||||
 | 
					++enum {
 | 
				
			||||||
 | 
					++	RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_ANONCE = 1,
 | 
				
			||||||
 | 
					++	RADIUS_VENDOR_ATTR_FREERADIUS_802_1X_EAPOL_KEY_MSG = 2,
 | 
				
			||||||
 | 
					++};
 | 
				
			||||||
 | 
					+ 
 | 
				
			||||||
 | 
					+ /* Hotspot 2.0 - WFA Vendor-specific RADIUS Attributes */
 | 
				
			||||||
 | 
					+ #define RADIUS_VENDOR_ID_WFA 40808
 | 
				
			||||||
 | 
					+-- 
 | 
				
			||||||
 | 
					+2.25.1
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										38
									
								
								patches/wifi/0015-hostapd-add-psk2-radius-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								patches/wifi/0015-hostapd-add-psk2-radius-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					From 8f55fad4bbc1e9f04b263a1dc2d3897de52c8b38 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					Date: Tue, 31 May 2022 08:09:20 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH 15/15] hostapd: add psk2-radius support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: John Crispin <john@phrozen.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 package/network/services/hostapd/files/hostapd.sh | 7 ++++++-
 | 
				
			||||||
 | 
					 1 file changed, 6 insertions(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
 | 
				
			||||||
 | 
					index df1aec0b42..d117a24975 100644
 | 
				
			||||||
 | 
					--- a/package/network/services/hostapd/files/hostapd.sh
 | 
				
			||||||
 | 
					+++ b/package/network/services/hostapd/files/hostapd.sh
 | 
				
			||||||
 | 
					@@ -704,7 +704,7 @@ hostapd_set_bss_options() {
 | 
				
			||||||
 | 
					 			set_default ieee80211w 2
 | 
				
			||||||
 | 
					 			set_default sae_require_mfp 1
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					-		psk-sae|eap-eap256)
 | 
				
			||||||
 | 
					+		psk-sae|psk2-radius|eap-eap256)
 | 
				
			||||||
 | 
					 			set_default ieee80211w 1
 | 
				
			||||||
 | 
					 			set_default sae_require_mfp 1
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					@@ -767,6 +767,11 @@ hostapd_set_bss_options() {
 | 
				
			||||||
 | 
					 			append bss_conf "wep_default_key=$wep_keyidx" "$N"
 | 
				
			||||||
 | 
					 			[ -n "$wep_rekey" ] && append bss_conf "wep_rekey_period=$wep_rekey" "$N"
 | 
				
			||||||
 | 
					 		;;
 | 
				
			||||||
 | 
					+		psk2-radius)
 | 
				
			||||||
 | 
					+			append bss_conf "wpa_psk_radius=3" "$N"
 | 
				
			||||||
 | 
					+			append_radius_server
 | 
				
			||||||
 | 
					+			vlan_possible=1
 | 
				
			||||||
 | 
					+		;;
 | 
				
			||||||
 | 
					 	esac
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	local auth_algs=$((($auth_mode_shared << 1) | $auth_mode_open))
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					From 08d64888eca2337cd7562f7c84bebde3f8eca858 Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Johann Hoffmann <johann.hoffmann@mailbox.org>
 | 
				
			||||||
 | 
					Date: Mon, 11 Apr 2022 17:25:43 +0000
 | 
				
			||||||
 | 
					Subject: [PATCH] Set eth0 as WAN interface by default for x86
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 target/linux/x86/base-files/etc/board.d/02_network | 3 +++
 | 
				
			||||||
 | 
					 1 file changed, 3 insertions(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/target/linux/x86/base-files/etc/board.d/02_network b/target/linux/x86/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					index 21f054019a..40b0bba9f5 100755
 | 
				
			||||||
 | 
					--- a/target/linux/x86/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					+++ b/target/linux/x86/base-files/etc/board.d/02_network
 | 
				
			||||||
 | 
					@@ -22,6 +22,9 @@ traverse-technologies-geos)
 | 
				
			||||||
 | 
					 	macaddr="$(cat /sys/class/net/eth0/address)" 2>/dev/null
 | 
				
			||||||
 | 
					 	[ -n "$macaddr" ] && ucidef_set_interface_macaddr "wan" "$macaddr"
 | 
				
			||||||
 | 
					 	;;
 | 
				
			||||||
 | 
					+*)
 | 
				
			||||||
 | 
					+	ucidef_set_interface_wan "eth0"
 | 
				
			||||||
 | 
					+	;;
 | 
				
			||||||
 | 
					 esac
 | 
				
			||||||
 | 
					 board_config_flush
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					2.25.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,5 +10,8 @@ feeds:
 | 
				
			|||||||
include:
 | 
					include:
 | 
				
			||||||
  - wifi-ax
 | 
					  - wifi-ax
 | 
				
			||||||
  - ucentral-ap
 | 
					  - ucentral-ap
 | 
				
			||||||
 | 
					packages:
 | 
				
			||||||
 | 
					  - ath11k-fwtest
 | 
				
			||||||
 | 
					  - ftm
 | 
				
			||||||
diffconfig: |
 | 
					diffconfig: |
 | 
				
			||||||
  CONFIG_KERNEL_IPQ_MEM_PROFILE=0
 | 
					  CONFIG_KERNEL_IPQ_MEM_PROFILE=0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
profile: cig_wf610d
 | 
					profile: cig_wf610d
 | 
				
			||||||
target: ipq40xx
 | 
					target: ipq40xx
 | 
				
			||||||
subtarget: generic
 | 
					subtarget: generic
 | 
				
			||||||
description: Build image for the CIG WF160D
 | 
					description: Build image for the CIG WF610D
 | 
				
			||||||
image: bin/targets/ipq40xx/generic/openwrt-ipq40xx-generic-cig_wf610d-squashfs-sysupgrade.bin
 | 
					image: bin/targets/ipq40xx/generic/openwrt-ipq40xx-generic-cig_wf610d-squashfs-sysupgrade.bin
 | 
				
			||||||
include:
 | 
					include:
 | 
				
			||||||
  - ucentral-ap
 | 
					  - ucentral-ap
 | 
				
			||||||
@@ -7,16 +7,8 @@ image: bin/targets/ipq807x/ipq807x/openwrt-ipq807x-edgecore_eap102-squashfs-sysu
 | 
				
			|||||||
feeds:
 | 
					feeds:
 | 
				
			||||||
  - name: ipq807x
 | 
					  - name: ipq807x
 | 
				
			||||||
    path: ../../feeds/ipq807x
 | 
					    path: ../../feeds/ipq807x
 | 
				
			||||||
  - name: bluetooth
 | 
					 | 
				
			||||||
    path: ../../feeds/bluetooth
 | 
					 | 
				
			||||||
include:
 | 
					include:
 | 
				
			||||||
  - wifi-ax
 | 
					  - wifi-ax
 | 
				
			||||||
  - ucentral-ap
 | 
					  - ucentral-ap
 | 
				
			||||||
packages:
 | 
					 | 
				
			||||||
  - nrf52840
 | 
					 | 
				
			||||||
  - kmod-bluetooth
 | 
					 | 
				
			||||||
  - bluez-libs
 | 
					 | 
				
			||||||
  - bluez-utils
 | 
					 | 
				
			||||||
  - bluez-utils-extra
 | 
					 | 
				
			||||||
diffconfig: |
 | 
					diffconfig: |
 | 
				
			||||||
  CONFIG_KERNEL_IPQ_MEM_PROFILE=0
 | 
					  CONFIG_KERNEL_IPQ_MEM_PROFILE=0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								profiles/indio_um-305ax.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								profiles/indio_um-305ax.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					profile: indio_um-305ax
 | 
				
			||||||
 | 
					target: ramips
 | 
				
			||||||
 | 
					subtarget: mt7621
 | 
				
			||||||
 | 
					description: Build image for the Indio UM-305ax
 | 
				
			||||||
 | 
					image: bin/targets/ramips/mt7621/openwrt-ramips-mt7621-indio_um-305ax-squashfs-sysupgrade.bin
 | 
				
			||||||
 | 
					include:
 | 
				
			||||||
 | 
					  - ucentral-ap
 | 
				
			||||||
							
								
								
									
										17
									
								
								profiles/indio_um-510ac-v3.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								profiles/indio_um-510ac-v3.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					profile: um-510ac-v3
 | 
				
			||||||
 | 
					target: ipq40xx
 | 
				
			||||||
 | 
					subtarget: generic
 | 
				
			||||||
 | 
					description: Build image for the Indio UM-510AC-V3
 | 
				
			||||||
 | 
					image: bin/targets/ipq40xx/generic/openwrt-ipq40xx-generic-um-510ac-v3-squashfs-sysupgrade.bin
 | 
				
			||||||
 | 
					feeds:
 | 
				
			||||||
 | 
					  - name: wifi_ath10k
 | 
				
			||||||
 | 
					    path: ../../feeds/wifi-ath10k
 | 
				
			||||||
 | 
					include:
 | 
				
			||||||
 | 
					  - ucentral-ap
 | 
				
			||||||
 | 
					packages:
 | 
				
			||||||
 | 
					  - ath10k-firmware-qca9887-ct
 | 
				
			||||||
 | 
					  - kmod-ath10k-ct
 | 
				
			||||||
 | 
					diffconfig: |
 | 
				
			||||||
 | 
					  # CONFIG_PACKAGE_kmod-ath10k is not set
 | 
				
			||||||
 | 
					  # CONFIG_PACKAGE_ath10k-firmware-qca9887 is not set
 | 
				
			||||||
							
								
								
									
										17
									
								
								profiles/indio_um-550ac.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								profiles/indio_um-550ac.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					profile: um-550ac
 | 
				
			||||||
 | 
					target: ipq40xx
 | 
				
			||||||
 | 
					subtarget: generic
 | 
				
			||||||
 | 
					description: Build image for the Indio UM-550ac
 | 
				
			||||||
 | 
					image: bin/targets/ipq40xx/generic/openwrt-ipq40xx-generic-um-550ac-squashfs-sysupgrade.bin
 | 
				
			||||||
 | 
					feeds:
 | 
				
			||||||
 | 
					  - name: wifi_ath10k
 | 
				
			||||||
 | 
					    path: ../../feeds/wifi-ath10k
 | 
				
			||||||
 | 
					include:
 | 
				
			||||||
 | 
					  - ucentral-ap
 | 
				
			||||||
 | 
					packages:
 | 
				
			||||||
 | 
					  - ath10k-firmware-qca9887-ct
 | 
				
			||||||
 | 
					  - kmod-ath10k-ct
 | 
				
			||||||
 | 
					diffconfig: |
 | 
				
			||||||
 | 
					  # CONFIG_PACKAGE_kmod-ath10k is not set
 | 
				
			||||||
 | 
					  # CONFIG_PACKAGE_ath10k-firmware-qca9887 is not set
 | 
				
			||||||
							
								
								
									
										16
									
								
								profiles/motorola_q14.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								profiles/motorola_q14.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					profile: motorola_q14
 | 
				
			||||||
 | 
					target: ipq807x
 | 
				
			||||||
 | 
					subtarget: ipq50xx
 | 
				
			||||||
 | 
					description: Build image for the Motorola Q14
 | 
				
			||||||
 | 
					image: bin/targets/ipq807x/ipq50xx/openwrt-ipq807x-motorola_q14-squashfs-sysupgrade.tar
 | 
				
			||||||
 | 
					feeds:
 | 
				
			||||||
 | 
					  - name: ipq807x
 | 
				
			||||||
 | 
					    path: ../../feeds/ipq807x
 | 
				
			||||||
 | 
					include:
 | 
				
			||||||
 | 
					  - wifi-ax
 | 
				
			||||||
 | 
					  - ucentral-ap
 | 
				
			||||||
 | 
					packages:
 | 
				
			||||||
 | 
					  - e2fsprogs
 | 
				
			||||||
 | 
					diffconfig: |
 | 
				
			||||||
 | 
					  CONFIG_KERNEL_IPQ_MEM_PROFILE=512
 | 
				
			||||||
@@ -30,6 +30,7 @@ packages:
 | 
				
			|||||||
  - lldpd
 | 
					  - lldpd
 | 
				
			||||||
  - maverick
 | 
					  - maverick
 | 
				
			||||||
  - opennds
 | 
					  - opennds
 | 
				
			||||||
 | 
					  - radius-gw-proxy
 | 
				
			||||||
  - radsecproxy
 | 
					  - radsecproxy
 | 
				
			||||||
  - ratelimit
 | 
					  - ratelimit
 | 
				
			||||||
  - rtty-openssl
 | 
					  - rtty-openssl
 | 
				
			||||||
@@ -43,6 +44,7 @@ packages:
 | 
				
			|||||||
  - ucentral-wifi
 | 
					  - ucentral-wifi
 | 
				
			||||||
  - ucentral-tools
 | 
					  - ucentral-tools
 | 
				
			||||||
  - ucode
 | 
					  - ucode
 | 
				
			||||||
 | 
					  - unetd
 | 
				
			||||||
  - udhcpsnoop
 | 
					  - udhcpsnoop
 | 
				
			||||||
  - udnssnoop
 | 
					  - udnssnoop
 | 
				
			||||||
  - usteer
 | 
					  - usteer
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,4 +6,4 @@ feeds:
 | 
				
			|||||||
packages:
 | 
					packages:
 | 
				
			||||||
  - wireless-regdb
 | 
					  - wireless-regdb
 | 
				
			||||||
  - kmod-sched-cake
 | 
					  - kmod-sched-cake
 | 
				
			||||||
  - ath11k-fwtest
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								profiles/x64_vm.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								profiles/x64_vm.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					profile: x64_vm
 | 
				
			||||||
 | 
					target: x86
 | 
				
			||||||
 | 
					subtarget: 64
 | 
				
			||||||
 | 
					description: Raw VM build image for x64
 | 
				
			||||||
 | 
					image: bin/targets/x86/64/openwrt-x86-64-generic-ext4-combined.img
 | 
				
			||||||
 | 
					include:
 | 
				
			||||||
 | 
					  - ucentral-ap
 | 
				
			||||||
 | 
					diffconfig: |
 | 
				
			||||||
 | 
					  CONFIG_TARGET_IMAGES_GZIP=n
 | 
				
			||||||
 | 
					  CONFIG_ISO_IMAGES=n
 | 
				
			||||||
 | 
					  CONFIG_TARGET_ROOTFS_SQUASHFS=n
 | 
				
			||||||
 | 
					  CONFIG_GRUB_EFI_IMAGES=n
 | 
				
			||||||
		Reference in New Issue
	
	Block a user