Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PW_SID:838147] Register EAPOL frame listeners earlier #331

Open
wants to merge 7 commits into
base: workflow
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
269 changes: 269 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
name: IWD CI

#
# The basic flow of the CI is as follows:
#
# 1. Get all inputs, or default values, and set as 'setup' job output
# 2. Find any cached binaries (hostapd, wpa_supplicant, kernel etc)
# 3. Checkout all dependent repositories
# 4. Tar all local files. This is an unfortunate requirement since github jobs
# cannot share local files. Since there are multiple CI's acting on the same
# set of repositories it makes more sense to retain these and re-download
# them for each CI job.
# 5. Run each CI, currently 'main' and 'musl'.
# * 'main' is the default IWD CI which runs all the build steps as well
# as test-runner
# * 'musl' uses an alpine docker image to test the build on musl-libc
#
# Both CI's use the 'iwd-ci' repo which calls into 'ci-docker'. The
# 'ci-docker' action essentially re-implements the native Github docker
# action but allows arbitrary options to be passed in (e.g. privileged or
# mounting non-standard directories)
#

on:
pull_request:
workflow_dispatch:
inputs:
tests:
description: Tests to run (comma separated, no spaces)
default: all
kernel:
description: Kernel version
default: '5.19'
hostapd_version:
description: Hostapd and wpa_supplicant version
default: '09a281e52a25b5461c4b08d261f093181266a554'
ell_ref:
description: ELL reference
default: refs/heads/workflow

repository_dispatch:
types: [ell-dispatch]

jobs:
setup:
runs-on: ubuntu-22.04
outputs:
tests: ${{ steps.inputs.outputs.tests }}
kernel: ${{ steps.inputs.outputs.kernel }}
hostapd_version: ${{ steps.inputs.outputs.hostapd_version }}
ell_ref: ${{ steps.inputs.outputs.ell_ref }}
repository: ${{ steps.inputs.outputs.repository }}
ref_branch: ${{ steps.inputs.outputs.ref_branch }}
steps:
#
# This makes CI inputs consistent depending on how the CI was invoked:
# * pull_request trigger won't have any inputs, so these need to be set
# to default values.
# * workflow_dispatch sets all inputs from the user input
# * repository_dispatch sets all inputs based on the JSON payload of
# the request.
#
- name: Setup Inputs
id: inputs
run: |
if [ ${{ github.event_name }} == 'workflow_dispatch' ]
then
TESTS=${{ github.event.inputs.tests }}
KERNEL=${{ github.event.inputs.kernel }}
HOSTAPD_VERSION=${{ github.event.inputs.hostapd_version }}
ELL_REF=${{ github.event.inputs.ell_ref }}
REF="$GITHUB_REF"
REPO="$GITHUB_REPOSITORY"
elif [ ${{ github.event_name }} == 'repository_dispatch' ]
then
TESTS=all
KERNEL=5.19
HOSTAPD_VERSION=09a281e52a25b5461c4b08d261f093181266a554
ELL_REF=${{ github.event.client_payload.ref }}
REF=$ELL_REF
REPO=${{ github.event.client_payload.repo }}
else
TESTS=all
KERNEL=5.19
HOSTAPD_VERSION=09a281e52a25b5461c4b08d261f093181266a554
ELL_REF="refs/heads/workflow"
REF="$GITHUB_REF"
REPO="$GITHUB_REPOSITORY"
fi

#
# Now that the inputs are sorted, set the output of this step to these
# values so future jobs can refer to them.
#
echo "tests=$TESTS" >> $GITHUB_OUTPUT
echo "kernel=$KERNEL" >> $GITHUB_OUTPUT
echo "hostapd_version=$HOSTAPD_VERSION" >> $GITHUB_OUTPUT
echo "ell_ref=$ELL_REF" >> $GITHUB_OUTPUT
echo "repository=$REPO" >> $GITHUB_OUTPUT
echo "ref_branch=$REF" >> $GITHUB_OUTPUT

- name: Cache UML Kernel
id: cache-uml-kernel
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/cache/um-linux-${{ steps.inputs.outputs.kernel }}
key: um-linux-${{ steps.inputs.outputs.kernel }}_ubuntu22

- name: Cache Hostapd
id: cache-hostapd
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/hostapd_${{ steps.inputs.outputs.hostapd_version }}
${{ github.workspace }}/cache/hostapd_cli_${{ steps.inputs.outputs.hostapd_version }}
key: hostapd_${{ steps.inputs.outputs.hostapd_version }}_ssl3

- name: Cache WpaSupplicant
id: cache-wpas
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}
${{ github.workspace }}/cache/wpa_cli_${{ steps.inputs.outputs.hostapd_version }}
key: wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}_ssl3

- name: Checkout IWD
uses: actions/checkout@v3
with:
path: iwd
repository: IWDTestBot/iwd
token: ${{ secrets.ACTION_TOKEN }}

- name: Checkout ELL
uses: actions/checkout@v3
with:
path: ell
repository: IWDTestBot/ell
ref: ${{ steps.inputs.outputs.ell_ref }}

- name: Checkout CiBase
uses: actions/checkout@v3
with:
repository: IWDTestBot/cibase
path: cibase

- name: Checkout CI
uses: actions/checkout@v3
with:
repository: IWDTestBot/iwd-ci
path: iwd-ci

- name: Tar files
run: |
FILES="iwd ell cibase iwd-ci"

if [ "${{ steps.cache-uml-kernel.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/um-linux-${{ steps.inputs.outputs.kernel }}"
fi

if [ "${{ steps.cache-hostapd.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/hostapd_${{ steps.inputs.outputs.hostapd_version }}"
FILES+=" ${{ github.workspace }}/cache/hostapd_cli_${{ steps.inputs.outputs.hostapd_version }}"
fi
if [ "${{ steps.cache-wpas.outputs.cache-hit }}" == 'true' ]
then
FILES+=" ${{ github.workspace }}/cache/wpa_supplicant_${{ steps.inputs.outputs.hostapd_version }}"
FILES+=" ${{ github.workspace }}/cache/wpa_cli_${{ steps.inputs.outputs.hostapd_version }}"
fi

tar -cvf archive.tar $FILES

- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: iwd-artifacts
path: |
archive.tar

iwd-alpine-ci:
runs-on: ubuntu-22.04
needs: setup
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: iwd-artifacts

- name: Untar
run: tar -xf archive.tar

- name: Modprobe pkcs8_key_parser
run: |
sudo modprobe pkcs8_key_parser

- name: Alpine CI
uses: IWDTestBot/iwd-ci@master
with:
ref_branch: ${{ needs.setup.outputs.ref_branch }}
repository: ${{ needs.setup.outputs.repository }}
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
ci: musl

iwd-ci:
runs-on: ubuntu-22.04
needs: setup
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: iwd-artifacts

- name: Untar
run: tar -xf archive.tar

- name: Cache UML Kernel
id: cache-uml-kernel
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/cache/um-linux-${{ needs.setup.outputs.kernel }}
key: um-linux-${{ needs.setup.outputs.kernel }}_ubuntu22

- name: Cache Hostapd
id: cache-hostapd
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/hostapd_${{ needs.setup.outputs.hostapd_version }}
${{ github.workspace }}/cache/hostapd_cli_${{ needs.setup.outputs.hostapd_version }}
key: hostapd_${{ needs.setup.outputs.hostapd_version }}_ssl3

- name: Cache WpaSupplicant
id: cache-wpas
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/cache/wpa_supplicant_${{ needs.setup.outputs.hostapd_version }}
${{ github.workspace }}/cache/wpa_cli_${{ needs.setup.outputs.hostapd_version }}
key: wpa_supplicant_${{ needs.setup.outputs.hostapd_version }}_ssl3

- name: Modprobe pkcs8_key_parser
run: |
sudo modprobe pkcs8_key_parser
echo ${{ needs.setup.outputs.ref_branch }}
echo ${{ needs.setup.outputs.repository }}

- name: Run CI
uses: IWDTestBot/iwd-ci@master
with:
ref_branch: ${{ needs.setup.outputs.ref_branch }}
repository: ${{ needs.setup.outputs.repository }}
tests: ${{ needs.setup.outputs.tests }}
kernel: ${{ needs.setup.outputs.kernel }}
hostapd_version: ${{ needs.setup.outputs.hostapd_version }}
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
ci: main

- name: Upload Logs
if: always()
uses: actions/upload-artifact@v3
with:
name: test-runner-logs
path: ${{ github.workspace }}/log
16 changes: 16 additions & 0 deletions .github/workflows/pw-to-pr-email.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
This is an automated email and please do not reply to this email.

Dear Submitter,

Thank you for submitting the patches to the IWD mailing list.
While preparing the CI tests, the patches you submitted couldn't be applied to the current HEAD of the repository.

----- Output -----
{}

Please resolve the issue and submit the patches again.


---
Regards,
IWDTestBot
14 changes: 14 additions & 0 deletions .github/workflows/pw-to-pr.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"email": {
"enable": true,
"server": "smtp.gmail.com",
"port": 587,
"user": "iwd.ci.bot@gmail.com",
"starttls": true,
"default-to": "prestwoj@gmail.com",
"only-maintainers": false,
"maintainers": [
"prestwoj@gmail.com"
]
}
}
43 changes: 43 additions & 0 deletions .github/workflows/schedule_work.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Sync Upstream
on:
schedule:
- cron: "*/15 * * * *"
workflow_dispatch:

jobs:
repo-sync:
runs-on: ubuntu-latest
steps:

- uses: actions/checkout@v2
with:
persist-credentials: false
fetch-depth: 0

- name: Manage Repo
uses: IWDTestBot/action-manage-repo@master
with:
src_repo: "https://git.kernel.org/pub/scm/network/wireless/iwd.git"
src_branch: "master"
dest_branch: "master"
workflow_branch: "workflow"
github_token: ${{ secrets.GITHUB_TOKEN }}

create_pr:
needs: repo-sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Patchwork to PR
uses: IWDTestBot/action-patchwork-to-pr@master
with:
pw_key_str: "user"
github_token: ${{ secrets.ACTION_TOKEN }}
email_token: ${{ secrets.EMAIL_TOKEN }}
patchwork_token: ${{ secrets.PATCHWORK_TOKEN }}
config: https://raw.githubusercontent.com/IWDTestBot/iwd/workflow/.github/workflows/pw-to-pr.json
patchwork_id: "408"
email_message: https://raw.githubusercontent.com/IWDTestBot/iwd/workflow/.github/workflows/pw-to-pr-email.txt
8 changes: 5 additions & 3 deletions src/netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -3011,6 +3011,11 @@ static void netdev_authenticate_event(struct l_genl_msg *msg,
}
}

if (!netdev->sm) {
netdev->sm = eapol_sm_new(netdev->handshake);
eapol_register(netdev->sm);
}

auth_error:
netdev_connect_failed(netdev, NETDEV_RESULT_AUTHENTICATION_FAILED,
status_code);
Expand Down Expand Up @@ -3099,9 +3104,6 @@ static void netdev_associate_event(struct l_genl_msg *msg,
netdev->ap = NULL;
}

netdev->sm = eapol_sm_new(netdev->handshake);
eapol_register(netdev->sm);

/* Just in case this was a retry */
netdev->ignore_connect_event = false;

Expand Down
Loading