mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-29 17:42:41 +00:00
Compare commits
95 Commits
release/v2
...
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
|
||||
|
||||
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:
|
||||
push:
|
||||
branches: [ main, next, staging-* ]
|
||||
@@ -8,10 +16,12 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
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: ['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:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -24,17 +34,12 @@ jobs:
|
||||
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 }}
|
||||
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: |
|
||||
LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
|
||||
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 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:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
@@ -78,3 +87,16 @@ jobs:
|
||||
repository: Telecominfraproject/wlan-testing
|
||||
event-type: new-ap-release
|
||||
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
|
||||
|
||||
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:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
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:
|
||||
- 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|\
|
||||
qcom,ipq5018-mp03.3|\
|
||||
yuncore,ax840|\
|
||||
motorola,q14|\
|
||||
sercomm,wallaby)
|
||||
ucidef_set_interface_lan "eth0"
|
||||
ucidef_set_interface_wan "eth1"
|
||||
|
||||
@@ -107,13 +107,22 @@ ath11k/IPQ5018/hw1.0/caldata.bin)
|
||||
case "$board" in
|
||||
cybertan,eww622-a1|\
|
||||
edgecore,eap104|\
|
||||
motorola,q14|\
|
||||
qcom,ipq5018-mp03.1)
|
||||
caldata_extract "0:ART" 0x1000 0x20000
|
||||
;;
|
||||
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)
|
||||
case "$board" in
|
||||
motorola,q14|\
|
||||
edgecore,eap104)
|
||||
caldata_extract "0:ART" 0x4c000 0x20000
|
||||
;;
|
||||
|
||||
@@ -19,4 +19,12 @@ boot() {
|
||||
ssdk_sh debug phy set 8 0x4004c441 0x8
|
||||
;;
|
||||
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() {
|
||||
case "$(board_name)" in
|
||||
hfcl,ion4xe|\
|
||||
hfcl,ion4xi)
|
||||
fw_setenv boot_count 0
|
||||
;;
|
||||
edgecore,eap101|\
|
||||
edgecore,eap102)
|
||||
avail=$(fw_printenv -n upgrade_available)
|
||||
[ ${avail} -eq 0 ] || {
|
||||
fw_setenv bootcount 0
|
||||
fw_setenv upgrade_available 0
|
||||
}
|
||||
[ ${avail} -eq 0 ] && fw_setenv upgrade_available 1
|
||||
fw_setenv bootcount 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
. /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() {
|
||||
local tar_file="$1"
|
||||
|
||||
@@ -16,6 +19,50 @@ qca_do_upgrade() {
|
||||
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() {
|
||||
local magic_long="$(get_magic_long "$1")"
|
||||
board=$(board_name)
|
||||
@@ -39,6 +86,7 @@ platform_check_image() {
|
||||
tplink,ex227|\
|
||||
tplink,ex447|\
|
||||
yuncore,ax840|\
|
||||
motorola,q14|\
|
||||
qcom,ipq6018-cp01|\
|
||||
qcom,ipq807x-hk01|\
|
||||
qcom,ipq807x-hk14|\
|
||||
@@ -59,6 +107,9 @@ platform_do_upgrade() {
|
||||
cig,wf188)
|
||||
qca_do_upgrade $1
|
||||
;;
|
||||
motorola,q14)
|
||||
emmc_do_upgrade $1
|
||||
;;
|
||||
cig,wf188n|\
|
||||
cig,wf194c|\
|
||||
cig,wf194c4|\
|
||||
@@ -67,8 +118,6 @@ platform_do_upgrade() {
|
||||
edgecore,eap104|\
|
||||
glinet,ax1800|\
|
||||
glinet,axt1800|\
|
||||
hfcl,ion4xi|\
|
||||
hfcl,ion4xe|\
|
||||
qcom,ipq6018-cp01|\
|
||||
qcom,ipq807x-hk01|\
|
||||
qcom,ipq807x-hk14|\
|
||||
@@ -80,12 +129,36 @@ platform_do_upgrade() {
|
||||
tplink,ex227)
|
||||
nand_upgrade_tar "$1"
|
||||
;;
|
||||
edgecore,eap106|\
|
||||
edgecore,eap102|\
|
||||
edgecore,eap101)
|
||||
hfcl,ion4xi|\
|
||||
hfcl,ion4xe)
|
||||
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"
|
||||
[ "$(find_mtd_chardev rootfs)" ] && CI_UBIPART="rootfs"
|
||||
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
|
||||
}
|
||||
|
||||
@@ -18,6 +18,17 @@ define Device/edgecore_eap104
|
||||
endef
|
||||
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
|
||||
DEVICE_TITLE := Qualcomm Maple 03.1
|
||||
DEVICE_DTS := qcom-ipq5018-mp03.1
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
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
|
||||
DEVICE_TITLE := Cigtech WF-188n
|
||||
DEVICE_DTS := qcom-ipq6018-cig-wf188n
|
||||
@@ -43,7 +32,7 @@ define Device/edgecore_eap101
|
||||
DEVICE_DTS := qcom-ipq6018-edgecore-eap101
|
||||
DEVICE_DTS_CONFIG := config@cp01-c1
|
||||
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
|
||||
TARGET_DEVICES += edgecore_eap101
|
||||
|
||||
@@ -52,7 +41,7 @@ define Device/wallys_dr6018
|
||||
DEVICE_DTS := qcom-ipq6018-wallys-dr6018
|
||||
DEVICE_DTS_CONFIG := config@cp01-c4
|
||||
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
|
||||
TARGET_DEVICES += wallys_dr6018
|
||||
|
||||
@@ -87,7 +76,7 @@ define Device/glinet_axt1800
|
||||
DEVICE_DTS := qcom-ipq6018-gl-axt1800
|
||||
SUPPORTED_DEVICES := glinet,axt1800
|
||||
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
|
||||
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
|
||||
|
||||
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() {
|
||||
[ -f /etc/ucentral/dev-id ] && return
|
||||
. /lib/functions.sh
|
||||
@@ -17,11 +28,49 @@ boot() {
|
||||
[ -e /dev/ubi1 ] && mount -t ubifs ubi1:certificates /certificates
|
||||
fi
|
||||
fi
|
||||
[ -f /certificates/dev-id ] && {
|
||||
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
|
||||
}
|
||||
copy_certificates
|
||||
|
||||
# if we get here no valid certificates were found
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
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() {
|
||||
[ -f /etc/ucentral/capabilities.json ] || {
|
||||
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
|
||||
|
||||
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_close_instance
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
{%
|
||||
let devid;
|
||||
let fd = fs.open("/etc/ucentral/dev-id", "r");
|
||||
if (!fd) {
|
||||
@@ -62,4 +61,3 @@ system("/etc/init.d/firstcontact disable");
|
||||
system("reload_config");
|
||||
system("/etc/init.d/ucentral start");
|
||||
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
|
||||
find_ssid() {
|
||||
local ssid
|
||||
config_get ssid $1 ssid
|
||||
[ "$ssid" == "$2" ] || return
|
||||
found=1
|
||||
@@ -119,7 +120,7 @@ addiface() {
|
||||
echo -n startup > /tmp/ratelimit.$iface
|
||||
|
||||
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" ] && {
|
||||
rm /tmp/ratelimit.$iface
|
||||
logger "ratelimit: failed to lookup ssid"
|
||||
|
||||
@@ -3,11 +3,11 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=ucentral-client
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-client.git
|
||||
PKG_MIRROR_HASH:=37a1b7393cf5d15dbcd4840d9ffb2b16bf5b43cdd5c0da955c744bfc10211cbc
|
||||
PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-client.git
|
||||
PKG_MIRROR_HASH:=afcdce6a4ea24405b98147bac342a24c21ad6ba91e57a2a966018949ece9a294
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2022-01-10
|
||||
PKG_SOURCE_VERSION:=6cb4485ab49c5ab9244fb55af9fd0e1801f154f4
|
||||
PKG_SOURCE_DATE:=2022-05-29
|
||||
PKG_SOURCE_VERSION:=a4671bbe7d30b1286b718e08573d73dae4df344a
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
@@ -19,7 +19,7 @@ define Package/ucentral-client
|
||||
SECTION:=ucentral
|
||||
CATEGORY:=uCentral
|
||||
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
|
||||
endef
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ start_service() {
|
||||
|
||||
mkdir -p /tmp/ucentral/
|
||||
|
||||
ucode -m fs -i /usr/share/ucentral/crashlog.uc
|
||||
ucode -l fs /usr/share/ucentral/crashlog.uc
|
||||
|
||||
. /lib/functions.sh
|
||||
cp /etc/config-shadow/ucentral /etc/config/
|
||||
|
||||
@@ -3,11 +3,11 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=ucentral-schema
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git
|
||||
PKG_MIRROR_HASH:=af89f22de096e860cfe5295837507d288d7c919d1cb61d7deca012895ed80321
|
||||
PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git
|
||||
PKG_MIRROR_HASH:=3ba2d66f8e52c784f136bf340ab2fb81568a1d8df8dbebfa487fc57652bea04f
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_DATE:=2022-01-17
|
||||
PKG_SOURCE_VERSION:=7015febc04ad70a956b1ad79f2911bbdc24458a5
|
||||
PKG_SOURCE_DATE:=2022-05-29
|
||||
PKG_SOURCE_VERSION:=96324e2f7443cb3ae70f8fca10f37548f673e3f8
|
||||
|
||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
||||
@@ -8,7 +8,7 @@ PROG=/usr/bin/ucode
|
||||
start_service() {
|
||||
local interval=$(uci get onlinecheck.@config[-1].check_interval)
|
||||
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_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": {
|
||||
"realms": [
|
||||
{
|
||||
"realm": "test",
|
||||
"protocol": "radsec",
|
||||
"realm": [ "radsec1", "radsec2" ],
|
||||
"host": "192.168.1.10",
|
||||
"secret": "secret",
|
||||
"ca-certificate": "Zm9vbwo=",
|
||||
"certificate": "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,
|
||||
"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 def = nl.const;
|
||||
|
||||
@@ -1,4 +1 @@
|
||||
[ ifup = "$ACTION" ] && {
|
||||
ip-collide
|
||||
[ $? -eq 0 ] || ubus call ucentral send '{"msg": "ip/domain collision detected", "severity": 3}'
|
||||
}
|
||||
[ ifup = "$ACTION" ] && /usr/share/ucentral/ip-collide.uc
|
||||
|
||||
@@ -12,13 +12,13 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=https://github.com/jow-/ucode.git
|
||||
PKG_MIRROR_HASH:=376b89c35967d3761acb192af9fb6b7b20dbcc50d03c8ed851751d2376bf26b4
|
||||
PKG_SOURCE_DATE:=2021-07-30
|
||||
PKG_SOURCE_VERSION:=8fd4746da31b945a6259ac846f7cf8dcfef0b1ef
|
||||
PKG_SOURCE_DATE:=2022-04-07
|
||||
PKG_SOURCE_VERSION:=33f1e0b0926e973fb5ae445e9a995848762143bb
|
||||
PKG_MIRROR_HASH:=e419678244c5402c739e3a200d6d1d7cd6989a711c73744bc68b2d5b76bae33a
|
||||
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
|
||||
PKG_LICENSE:=ISC
|
||||
|
||||
PKG_ABI_VERSION:=20210730
|
||||
PKG_ABI_VERSION:=20220322
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
@@ -33,7 +33,7 @@ endef
|
||||
|
||||
define Package/ucode
|
||||
$(Package/ucode/default)
|
||||
DEPENDS:=+libucode
|
||||
DEPENDS:=+libucode
|
||||
endef
|
||||
|
||||
define Package/ucode/description
|
||||
@@ -65,17 +65,6 @@ define Package/ucode-mod-fs/description
|
||||
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
|
||||
$(Package/ucode/default)
|
||||
TITLE+= (math module)
|
||||
@@ -87,6 +76,50 @@ define Package/ucode-mod-math/description
|
||||
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
|
||||
$(Package/ucode/default)
|
||||
TITLE+= (ubus module)
|
||||
@@ -109,40 +142,16 @@ define Package/ucode-mod-uci/description
|
||||
The uci module allows templates to read and modify uci configuration.
|
||||
endef
|
||||
|
||||
|
||||
define Package/ucode-mod-nl80211
|
||||
define Package/ucode-mod-uloop
|
||||
$(Package/ucode/default)
|
||||
TITLE+= (nl80211 module)
|
||||
DEPENDS:=ucode +libnl-tiny +kmod-mac80211
|
||||
TITLE+= (uloop module)
|
||||
DEPENDS:=ucode +libubox
|
||||
endef
|
||||
|
||||
define Package/ucode-mod-nl80211/description
|
||||
The nl80211 module allows templates to send and receive nl80211 messages..
|
||||
define Package/ucode-mod-uloop/description
|
||||
The uloop module allows templates to run a main loop.
|
||||
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
|
||||
$(Build/Prepare/Default)
|
||||
$(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
|
||||
$(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
|
||||
|
||||
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/
|
||||
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
|
||||
$(INSTALL_DIR) $(1)/usr/lib/ucode
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/resolv.so $(1)/usr/lib/ucode/
|
||||
endef
|
||||
|
||||
define Package/ucode-mod-math/install
|
||||
define Package/ucode-mod-rtnl/install
|
||||
$(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
|
||||
|
||||
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/
|
||||
endef
|
||||
|
||||
define Package/ucode-mod-nl80211/install
|
||||
define Package/ucode-mod-uloop/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-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/
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/ucode/uloop.so $(1)/usr/lib/ucode/
|
||||
endef
|
||||
|
||||
|
||||
$(eval $(call BuildPackage,ucode))
|
||||
$(eval $(call BuildPackage,libucode))
|
||||
$(eval $(call BuildPackage,ucode-mod-fs))
|
||||
$(eval $(call BuildPackage,ucode-mod-resolv))
|
||||
$(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-uci))
|
||||
$(eval $(call BuildPackage,ucode-mod-nl80211))
|
||||
$(eval $(call BuildPackage,ucode-mod-struct))
|
||||
$(eval $(call BuildPackage,ucode-mod-rtnl))
|
||||
$(eval $(call BuildPackage,ucode-mod-uloop))
|
||||
|
||||
@@ -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-2021-07-30-03b6a8ef/lib/nl80211.c
|
||||
--- ucode-2022-04-07-33f1e0b0.orig/lib/nl80211.c
|
||||
+++ ucode-2022-04-07-33f1e0b0/lib/nl80211.c
|
||||
@@ -38,7 +38,7 @@ limitations under the License.
|
||||
#include <netlink/genl/family.h>
|
||||
#include <netlink/genl/ctrl.h>
|
||||
|
||||
@@ -8,20 +8,20 @@ Subject: [PATCH] fixes
|
||||
lib/rtnl.c | 1 +
|
||||
2 files changed, 87 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/lib/nl80211.c b/lib/nl80211.c
|
||||
index fc24fb8..3e21141 100644
|
||||
--- a/lib/nl80211.c
|
||||
+++ b/lib/nl80211.c
|
||||
@@ -45,6 +45,8 @@ limitations under the License.
|
||||
Index: ucode-2022-04-07-33f1e0b0/lib/nl80211.c
|
||||
===================================================================
|
||||
--- ucode-2022-04-07-33f1e0b0.orig/lib/nl80211.c
|
||||
+++ ucode-2022-04-07-33f1e0b0/lib/nl80211.c
|
||||
@@ -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
|
||||
+
|
||||
static struct {
|
||||
int code;
|
||||
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 = {
|
||||
.headsize = 0,
|
||||
.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 = {
|
||||
.headsize = 0,
|
||||
.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 = {
|
||||
.headsize = 0,
|
||||
.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 = {
|
||||
.headsize = 0,
|
||||
.nattrs = 7,
|
||||
@@ -645,13 +687,26 @@ static const uc_nl_nested_spec_t nl80211_bss_nla = {
|
||||
|
||||
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 = {
|
||||
@@ -714,6 +756,10 @@ static const uc_nl_nested_spec_t nl80211
|
||||
}
|
||||
};
|
||||
|
||||
@@ -127,77 +99,12 @@ index fc24fb8..3e21141 100644
|
||||
+
|
||||
static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
|
||||
.headsize = 0,
|
||||
- .nattrs = 34,
|
||||
+ .nattrs = 35,
|
||||
.attrs = {
|
||||
{ NL80211_STA_INFO_INACTIVE_TIME, "inactive_time", DT_U32, 0, NULL },
|
||||
{ NL80211_STA_INFO_RX_BYTES, "rx_bytes", DT_U32, 0, NULL },
|
||||
@@ -724,21 +783,37 @@ static const uc_nl_nested_spec_t nl80211_sta_info_nla = {
|
||||
{ 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 = {
|
||||
.nattrs = 35,
|
||||
Index: ucode-2022-04-07-33f1e0b0/lib/rtnl.c
|
||||
===================================================================
|
||||
--- ucode-2022-04-07-33f1e0b0.orig/lib/rtnl.c
|
||||
+++ ucode-2022-04-07-33f1e0b0/lib/rtnl.c
|
||||
@@ -682,6 +682,7 @@ static const uc_nl_nested_spec_t link_ms
|
||||
{ IFLA_UNSPEC, "type", DT_U16, 0, MEMBER(ifinfomsg, ifi_type) },
|
||||
{ IFLA_UNSPEC, "dev", DT_NETDEV, 0, MEMBER(ifinfomsg, ifi_index) },
|
||||
{ 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_BROADCAST, "broadcast", DT_LLADDR, 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_set_param command "/usr/libexec/uchannel.uc"
|
||||
procd_set_param respawn 1 300 0
|
||||
procd_close_instancea
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/ucode
|
||||
{%
|
||||
let fs = require("fs");
|
||||
let ubus = require("ubus");
|
||||
let conn = ubus.connect();
|
||||
@@ -56,7 +55,7 @@ function state_get() {
|
||||
function state_set(state) {
|
||||
let file = fs.open("/tmp/uchannel.json", "w");
|
||||
|
||||
state.uptime = uptime;
|
||||
state.executed = uptime;
|
||||
file.write(state);
|
||||
file.close();
|
||||
|
||||
@@ -64,7 +63,7 @@ function state_set(state) {
|
||||
node: "*",
|
||||
data: {
|
||||
status: state.status,
|
||||
uptime: state.uptime,
|
||||
uptime: state.executed,
|
||||
}
|
||||
});
|
||||
printf("entering %s state\n", state.status);
|
||||
@@ -259,8 +258,8 @@ function channel_balance(band, mask) {
|
||||
|
||||
function youngest() {
|
||||
for (let ip, host in hosts) {
|
||||
if (host.host_info.status == "overlap" &&
|
||||
host.host_info.uptime < uptime) {
|
||||
if (host.host_info?.status == "overlap" &&
|
||||
host.host_info?.uptime < uptime) {
|
||||
print("Found a younger host\n");
|
||||
return 1;
|
||||
}
|
||||
@@ -272,7 +271,7 @@ function youngest() {
|
||||
let state = state_get();
|
||||
|
||||
if (state.status == "waiting" &&
|
||||
(uptime - state.uptime < (12 * 60 * 60))) {
|
||||
(uptime - state.changed < (12 * 60 * 60))) {
|
||||
state_set(state);
|
||||
return;
|
||||
}
|
||||
@@ -328,4 +327,3 @@ for (let freq, obj in overlap) {
|
||||
state.status = "waiting";
|
||||
state.changed = uptime;
|
||||
state_set(state);
|
||||
%}
|
||||
|
||||
@@ -15,7 +15,7 @@ define Package/$(PKG_NAME)
|
||||
URL:=http://www.qca.qualcomm.com
|
||||
MAINTAINER:=Qualcomm Atheros
|
||||
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
|
||||
|
||||
define Package/$(PKG_NAME)/description/Default
|
||||
|
||||
@@ -371,9 +371,9 @@ CONFIG_INTERWORKING=y
|
||||
CONFIG_TAXONOMY=y
|
||||
|
||||
# Fast Initial Link Setup (FILS) (IEEE 802.11ai)
|
||||
#CONFIG_FILS=y
|
||||
CONFIG_FILS=y
|
||||
# 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
|
||||
# limited command line editing and history support.
|
||||
|
||||
@@ -154,6 +154,8 @@ hostapd_prepare_device_config() {
|
||||
set_default ema 0
|
||||
set_default acs_exclude_dfs 0
|
||||
|
||||
[ "$band" = "6g" ] && multiple_bssid=1
|
||||
|
||||
[ -n "$country" ] && {
|
||||
append base_cfg "country_code=$country" "$N"
|
||||
[ -n "$country3" ] && append base_cfg "country3=$country3" "$N"
|
||||
@@ -704,7 +706,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 +769,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))
|
||||
|
||||
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)" \
|
||||
CROSS_COMPILE="$(KERNEL_CROSS)" \
|
||||
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)" \
|
||||
MODPROBE=true \
|
||||
KLIB=$(TARGET_MODULES_DIR) \
|
||||
KERNEL_SUBLEVEL=$(lastword $(subst ., ,$(KERNEL_PATCHVER))) \
|
||||
KBUILD_MODPOST_WARN=1 \
|
||||
KBUILD_LDFLAGS_MODULE_PREREQ=
|
||||
|
||||
define ConfigVars
|
||||
|
||||
@@ -84,6 +84,8 @@ drv_mac80211_init_iface_config() {
|
||||
config_add_int dtim_period
|
||||
config_add_int start_disabled
|
||||
|
||||
config_add_int fils_discovery_max_interval
|
||||
|
||||
# mesh
|
||||
config_add_string mesh_id
|
||||
config_add_int $MP_CONFIG_INT
|
||||
@@ -488,9 +490,11 @@ mac80211_hostapd_setup_bss() {
|
||||
|
||||
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 fils_discovery_max_interval
|
||||
|
||||
set_default wds 0
|
||||
set_default start_disabled 0
|
||||
set_default fils_discovery_max_interval 0
|
||||
|
||||
[ "$wds" -gt 0 ] && {
|
||||
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"
|
||||
|
||||
[ "$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
|
||||
$hostapd_cfg
|
||||
bssid=$macaddr
|
||||
@@ -718,6 +730,7 @@ mac80211_prepare_vif() {
|
||||
[ "$wds" -gt 0 ] && wdsflag="4addr on"
|
||||
mac80211_iw_interface_add "$phy" "$ifname" managed "$wdsflag" || return
|
||||
if [ "$wds" -gt 0 ]; then
|
||||
echo 1 > /sys/kernel/debug/ieee80211/$phy/netdev\:$ifname/disable_offload
|
||||
iw "$ifname" set 4addr on
|
||||
else
|
||||
iw "$ifname" set 4addr off
|
||||
@@ -1049,6 +1062,8 @@ drv_mac80211_setup() {
|
||||
wireless_set_retry 0
|
||||
return 1
|
||||
}
|
||||
|
||||
[ "$band" = "6g" ] && multiple_bssid=1
|
||||
|
||||
wireless_set_data 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>
|
||||
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>
|
||||
---
|
||||
@@ -9,7 +9,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
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
|
||||
+++ b/package/libs/libubox/Makefile
|
||||
@@ -5,9 +5,9 @@ PKG_RELEASE=2
|
||||
@@ -19,9 +19,9 @@ index d2c07783e1..3b01930d6c 100644
|
||||
-PKG_MIRROR_HASH:=7dd1db1e0074a9c7c722db654cce3111b3bd3cff0bfd791c4497cb0f6c22d3ca
|
||||
-PKG_SOURCE_DATE:=2021-05-16
|
||||
-PKG_SOURCE_VERSION:=b14c4688612c05c78ce984d7bde633bce8703b1e
|
||||
+PKG_MIRROR_HASH:=82d84fb97e725b0a18ceac639cae0c17d922754bb648ff58c62069d92798a6cd
|
||||
+PKG_SOURCE_DATE:=2021-08-19
|
||||
+PKG_SOURCE_VERSION:=c86a894ec63d83ecf2c373bbf9dc8fba9713d942
|
||||
+PKG_MIRROR_HASH:=cf48d00ed0ea74d53f2043eb9f9dc52834c0b214f258201cf22dfff7dd6c6e40
|
||||
+PKG_SOURCE_DATE:=2022-05-15
|
||||
+PKG_SOURCE_VERSION:=d2223ef9da7172a84d1508733dc58840e1381e3c
|
||||
PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE))
|
||||
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>
|
||||
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>
|
||||
---
|
||||
package/network/config/netifd/Makefile | 2 -
|
||||
.../config/netifd/patches/100-script.patch | 21 +++++++++++
|
||||
.../config/netifd/patches/hairpin.patch | 37 +++++++++++++++++++
|
||||
3 files changed, 58 insertions(+), 2 deletions(-)
|
||||
package/network/config/netifd/Makefile | 8 +++----
|
||||
.../config/netifd/patches/100-script.patch | 21 +++++++++++++++++++
|
||||
2 files changed, 24 insertions(+), 5 deletions(-)
|
||||
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
|
||||
index cd4f8f423d..e4399b2473 100644
|
||||
index cd4f8f423d..c0a053cd4f 100644
|
||||
--- a/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_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>
|
||||
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>
|
||||
---
|
||||
@@ -11,10 +11,10 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
.../ipq40xx/base-files/etc/board.d/02_network | 1 +
|
||||
.../etc/hotplug.d/firmware/11-ath10k-caldata | 8 +
|
||||
.../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 +
|
||||
.../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 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|\
|
||||
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
|
||||
index b7ee73b12e..3948c08984 100644
|
||||
index b12c9af9a7..4a3f18579c 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
|
||||
@@ -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)
|
||||
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
|
||||
index 0000000000..e75e35e8ef
|
||||
index 0000000000..3f24369f19
|
||||
--- /dev/null
|
||||
+++ 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.
|
||||
+ *
|
||||
+ * Permission to use, copy, modify, and/or distribute this software for any
|
||||
@@ -395,7 +395,13 @@ index 0000000000..e75e35e8ef
|
||||
+ firmware@180000 {
|
||||
+ compatible = "denx,fit";
|
||||
+ 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 {
|
||||
+ switch_cpu_bmp = <0x1>; /* cpu 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";
|
||||
+ };
|
||||
+
|
||||
@@ -589,7 +594,7 @@ index 0000000000..e75e35e8ef
|
||||
+
|
||||
+};
|
||||
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
|
||||
+++ b/target/linux/ipq40xx/image/generic.mk
|
||||
@@ -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
|
||||
+
|
||||
+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
|
||||
|
||||
|
||||
@@ -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>
|
||||
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>
|
||||
---
|
||||
@@ -16,10 +16,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
.../linux/ramips/files/include/nmbm/nmbm-os.h | 69 -
|
||||
target/linux/ramips/files/include/nmbm/nmbm.h | 102 -
|
||||
target/linux/ramips/image/mt7621.mk | 20 +-
|
||||
.../etc/hotplug.d/ieee80211/10_fix_wifi_mac | 5 +
|
||||
.../mt7621/base-files/lib/upgrade/platform.sh | 7 +-
|
||||
target/linux/ramips/mt7621/config-5.4 | 8 -
|
||||
.../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/Makefile
|
||||
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
|
||||
$(Device/dsa-migration)
|
||||
$(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
|
||||
index 924f259e25..93f6e836dc 100755
|
||||
--- 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>
|
||||
Date: Sun, 2 Jan 2022 09:56:17 +0100
|
||||
Subject: [PATCH 70/83] rtkmipsel: add kernel-version
|
||||
Date: Sat, 7 May 2022 19:48:29 +0200
|
||||
Subject: [PATCH] rtkmipsel: add kernel-version
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
include/kernel-version.mk | 2 ++
|
||||
include/target.mk | 2 +-
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/include/kernel-version.mk b/include/kernel-version.mk
|
||||
index efecf2f919..787abfca14 100644
|
||||
@@ -27,19 +26,6 @@ index efecf2f919..787abfca14 100644
|
||||
LINUX_KERNEL_HASH-4.4.60 = e7f2f47acf17497d6ffd713eda65c025b3df0bce09faa8c04712bf1b3cfc9fdb
|
||||
LINUX_KERNEL_HASH-4.14.193 = 0b0fb41d4430e1a42738b341cbfd2f41951aa5cd02acabbd53f076119c8b9f03
|
||||
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
|
||||
|
||||
|
||||
@@ -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>
|
||||
Date: Wed, 3 Nov 2021 14:33:31 +0100
|
||||
Subject: [PATCH 49/51] kernel-headers: add v3.18->v5.10 support
|
||||
Date: Sat, 7 May 2022 19:50:33 +0200
|
||||
Subject: [PATCH 4/4] kernel-headers: add v3.18->v5.10 support
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
toolchain/kernel-headers/Makefile | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
toolchain/kernel-headers/Makefile | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
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
|
||||
+++ 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 ($(filter 3.18 4.4,$(KERNEL_PATCHVER)),)
|
||||
KERNEL_PATCHVER := 5.10
|
||||
KERNEL_NAME_SUFFIX:=
|
||||
+ifneq ($(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_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_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(KERNEL_PATCHVER)),"$(dir)")
|
||||
+ $(warning GENERIC_BACKPORT_DIR = $(GENERIC_BACKPORT_DIR))
|
||||
endif
|
||||
|
||||
include $(INCLUDE_DIR)/kernel-version.mk
|
||||
+ include $(INCLUDE_DIR)/kernel-version.mk
|
||||
+ include $(INCLUDE_DIR)/kernel.mk
|
||||
+endif
|
||||
+
|
||||
PKG_NAME:=linux
|
||||
PKG_VERSION:=$(LINUX_VERSION)
|
||||
PKG_SOURCE:=$(LINUX_SOURCE)
|
||||
--
|
||||
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>
|
||||
Date: Sun, 2 Jan 2022 10:09:59 +0100
|
||||
Subject: [PATCH 1/2] rtkmipsel: select gcc-5 as the compiler
|
||||
Date: Sun, 8 May 2022 07:03:08 +0200
|
||||
Subject: [PATCH] rtkmipsel: select gcc-5 as the compiler
|
||||
|
||||
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:
|
||||
- wifi-ax
|
||||
- ucentral-ap
|
||||
packages:
|
||||
- ath11k-fwtest
|
||||
- ftm
|
||||
diffconfig: |
|
||||
CONFIG_KERNEL_IPQ_MEM_PROFILE=0
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
profile: cig_wf610d
|
||||
target: ipq40xx
|
||||
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
|
||||
include:
|
||||
- ucentral-ap
|
||||
@@ -7,16 +7,8 @@ image: bin/targets/ipq807x/ipq807x/openwrt-ipq807x-edgecore_eap102-squashfs-sysu
|
||||
feeds:
|
||||
- name: ipq807x
|
||||
path: ../../feeds/ipq807x
|
||||
- name: bluetooth
|
||||
path: ../../feeds/bluetooth
|
||||
include:
|
||||
- wifi-ax
|
||||
- ucentral-ap
|
||||
packages:
|
||||
- nrf52840
|
||||
- kmod-bluetooth
|
||||
- bluez-libs
|
||||
- bluez-utils
|
||||
- bluez-utils-extra
|
||||
diffconfig: |
|
||||
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
|
||||
- maverick
|
||||
- opennds
|
||||
- radius-gw-proxy
|
||||
- radsecproxy
|
||||
- ratelimit
|
||||
- rtty-openssl
|
||||
@@ -43,6 +44,7 @@ packages:
|
||||
- ucentral-wifi
|
||||
- ucentral-tools
|
||||
- ucode
|
||||
- unetd
|
||||
- udhcpsnoop
|
||||
- udnssnoop
|
||||
- usteer
|
||||
|
||||
@@ -6,4 +6,4 @@ feeds:
|
||||
packages:
|
||||
- wireless-regdb
|
||||
- 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