Re: [rft] net80211 scan overhaul, pass 1
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 On 01/08/2015 07:58, Alexandr Krivulya wrote: > 04.01.2015 06:46, Adrian Chadd пишет: >> hi all, >> >> I've started overhauling the net80211 scan infrastructure so it can >> support fully-offloaded scan firmware (like the intel iwn(4) NICs, and >> the upcoming 7260 driver I'm hacking on.) >> >> I'd like this patch tested: >> >> https://people.freebsd.org/~adrian/net80211/20150103-net80211-scan-overhaul-1.diff >> >> This splits the scan code into two halves - the generic bits that >> drive when and what to do about scanning, and the bits that implement >> the software scanner. >> >> The software scanner is the bit that schedules channel changes, >> listens for probe response frames, adds them to the scan cache, aborts >> and goes back to the original channel when needed. It also tells the >> drivers that scanning is about to happen, so the driver can prepare to >> go off-channel for a bit. >> >> For the intel NICs (and other things, i'm sure) that do full scan >> offload, we just say "Hey, scan these channels, here's the SSIDs to >> actively probe for, tell me when you're done" and you get back probe >> response frames or scan command results with all the relevant >> information. The wireless stack doesn't have to control the process so >> fine-grained - as far as the stack and network interface is concerned, >> it's still associated and traffic is still queued as per normal. The >> NIC firmware itself takes care of scheduling the off-channel scan >> bits, sending the sleep frames as it goes off-channel temporarily, >> etc. It's supposed to be very transparent. We don't even have to send >> probe request frames during scanning - the firmware will do that for >> us. >> >> This work doesn't do all work required - it's just going to refactor >> out the scan bits. I still have to turn it into methods that intel and >> such can be overridden. I still have to go through and plumb the VAP >> power save state work so we don't actually send sleep/wakeup frames. >> All of that is done for us in the firmware. >> >> So I'd appreciate this getting some testing by FreeBSD-HEAD wifi >> users. If you see any issues then please let me know. I'm going to >> commit it in a couple of days so I can continue along the path of >> refactoring out this stuff and turning it into methods that the iwn >> and future drivers can override to implement their own scanning >> module. >> >> Thanks! >> >> >> >> -adrian >> ___ >> freebsd-wireless@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-wireless >> To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org" > I see your patch is already in HEAD. Works for me on Intel N2230 in > 11g-mode. > ___ > freebsd-wireless@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-wireless > To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org" > Mine worked fine, too. -BEGIN PGP SIGNATURE- Version: GnuPG v2 iF4EAREIAAYFAlSvZqYACgkQSfBQu3oOwYzosQD/SoavMlhGkjQoeBOilUtF2X0k ReK6EEprOdr4qauk1iMA/jwgB++DpK/baUwghrZbLVKuq1Nis3bEr/vAvjTMWD3v =2L7y -END PGP SIGNATURE- ___ freebsd-wireless@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-wireless To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"
Re: [rft] net80211 scan overhaul, pass 1
04.01.2015 06:46, Adrian Chadd пишет: > hi all, > > I've started overhauling the net80211 scan infrastructure so it can > support fully-offloaded scan firmware (like the intel iwn(4) NICs, and > the upcoming 7260 driver I'm hacking on.) > > I'd like this patch tested: > > https://people.freebsd.org/~adrian/net80211/20150103-net80211-scan-overhaul-1.diff > > This splits the scan code into two halves - the generic bits that > drive when and what to do about scanning, and the bits that implement > the software scanner. > > The software scanner is the bit that schedules channel changes, > listens for probe response frames, adds them to the scan cache, aborts > and goes back to the original channel when needed. It also tells the > drivers that scanning is about to happen, so the driver can prepare to > go off-channel for a bit. > > For the intel NICs (and other things, i'm sure) that do full scan > offload, we just say "Hey, scan these channels, here's the SSIDs to > actively probe for, tell me when you're done" and you get back probe > response frames or scan command results with all the relevant > information. The wireless stack doesn't have to control the process so > fine-grained - as far as the stack and network interface is concerned, > it's still associated and traffic is still queued as per normal. The > NIC firmware itself takes care of scheduling the off-channel scan > bits, sending the sleep frames as it goes off-channel temporarily, > etc. It's supposed to be very transparent. We don't even have to send > probe request frames during scanning - the firmware will do that for > us. > > This work doesn't do all work required - it's just going to refactor > out the scan bits. I still have to turn it into methods that intel and > such can be overridden. I still have to go through and plumb the VAP > power save state work so we don't actually send sleep/wakeup frames. > All of that is done for us in the firmware. > > So I'd appreciate this getting some testing by FreeBSD-HEAD wifi > users. If you see any issues then please let me know. I'm going to > commit it in a couple of days so I can continue along the path of > refactoring out this stuff and turning it into methods that the iwn > and future drivers can override to implement their own scanning > module. > > Thanks! > > > > -adrian > ___ > freebsd-wireless@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-wireless > To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org" I see your patch is already in HEAD. Works for me on Intel N2230 in 11g-mode. ___ freebsd-wireless@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-wireless To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"
Re: [rft] net80211 scan overhaul, pass 1
No, will test it later when I'm free. On Mon, Jan 5, 2015 at 1:42 PM, Adrian Chadd wrote: > Oh, damn. Erm, you have to add ieee80211_swscan.c to sys/conf/files ; > I only patched the kernel module directory :( > > > > -adrian > > > On 5 January 2015 at 12:16, Eric L. Camachat > wrote: > > -BEGIN PGP SIGNED MESSAGE- > > Hash: SHA256 > > > > On 01/03/2015 20:46, Adrian Chadd wrote: > >> hi all, > >> > >> I've started overhauling the net80211 scan infrastructure so it > >> can support fully-offloaded scan firmware (like the intel iwn(4) > >> NICs, and the upcoming 7260 driver I'm hacking on.) > >> > >> I'd like this patch tested: > >> > >> > https://people.freebsd.org/~adrian/net80211/20150103-net80211-scan-overhaul-1.diff > >> > >> This splits the scan code into two halves - the generic bits that > >> drive when and what to do about scanning, and the bits that > >> implement the software scanner. > > > > Cannot be compiled on 11-CURRENT, see: > > - -- > stage 3.2: building everything > > - -- > > cd /usr/obj/usr/src/sys/KETAGALAN; MAKEOBJDIRPREFIX=/usr/obj > > MACHINE_ARCH=amd64 MACHINE=amd64 CPUTYPE=corei7-avx > > GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin > > GROFF_FONT_PATH=/usr/obj/usr/s > > rc/tmp/legacy/usr/share/groff_font > > GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac > > _SHLIBDIRPREFIX=/usr/obj/usr/src/tmp _LDSCRIPTROOT= VERSION="FreeBSD > > 11.0-CURRENT amd64 1100052" IN > > STALL="sh /usr/src/tools/install.sh" > > > PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr > > > /src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin > > CC="cc " CXX="c++ " DEPFLAGS="" CPP="cpp " AS="as" AR="ar" LD="ld" > > NM=nm OBJDUMP=objd > > ump OBJCOPY="objcopy" RANLIB=ranlib STRINGS= SIZE="size" make -m > > /usr/src/share/mk KERNEL=kernel all -DNO_MODULES_OBJ > > linking kernel.debug > > ieee80211_scan.o: In function `ieee80211_scan_attach': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x6): undefined > > reference to `ieee80211_swscan_attach' > > ieee80211_scan.o: In function `ieee80211_scan_detach': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x16): undefined > > reference to `ieee80211_swscan_detach' > > ieee80211_scan.o: In function `ieee80211_scan_vattach': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x8b): undefined > > reference to `ieee80211_swscan_vattach' > > ieee80211_scan.o: In function `ieee80211_scan_vdetach': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x10b): undefined > > reference to `ieee80211_swscan_vdetach' > > ieee80211_scan.o: In function `ieee80211_start_scan_locked': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x812): undefined > > reference to `ieee80211_swscan_set_scan_duration' > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x8b0): undefined > > reference to `ieee80211_swscan_run_scan_task' > > ieee80211_scan.o: In function `ieee80211_start_scan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x94e): undefined > > reference to `ieee80211_swscan_start_scan' > > ieee80211_scan.o: In function `ieee80211_check_scan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xbbb): undefined > > reference to `ieee80211_swscan_check_scan' > > ieee80211_scan.o: In function `ieee80211_bg_scan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xcc5): undefined > > reference to `ieee80211_swscan_bg_scan' > > ieee80211_scan.o: In function `ieee80211_cancel_scan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd06): undefined > > reference to `ieee80211_swscan_cancel_scan' > > ieee80211_scan.o: In function `ieee80211_cancel_anyscan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd16): undefined > > reference to `ieee80211_swscan_cancel_anyscan' > > ieee80211_scan.o: In function `ieee80211_scan_next': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd26): undefined > > reference to `ieee80211_swscan_scan_next' > > ieee80211_scan.o: In function `ieee80211_scan_done': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xdd3): undefined > > reference to `ieee80211_swscan_scan_done' > > ieee80211_scan.o: In function `ieee80211_probe_curchan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xe64): undefined > > reference to `ieee80211_swscan_probe_curchan' > > ieee80211_scan.o: In function `ieee80211_add_scan': > > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x1036): undefined > > reference to `ieee80211_swscan_add_scan' > > ieee80211_scan_sta.o: In function `sta_attach': > > /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x102): undefined > > reference to `M_80211_SCAN' > > ieee80211_scan_sta.o: In function `sta_detach': > > /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x224): undefined > > reference to `M_80211_SC
Re: [rft] net80211 scan overhaul, pass 1
Oh, damn. Erm, you have to add ieee80211_swscan.c to sys/conf/files ; I only patched the kernel module directory :( -adrian On 5 January 2015 at 12:16, Eric L. Camachat wrote: > -BEGIN PGP SIGNED MESSAGE- > Hash: SHA256 > > On 01/03/2015 20:46, Adrian Chadd wrote: >> hi all, >> >> I've started overhauling the net80211 scan infrastructure so it >> can support fully-offloaded scan firmware (like the intel iwn(4) >> NICs, and the upcoming 7260 driver I'm hacking on.) >> >> I'd like this patch tested: >> >> https://people.freebsd.org/~adrian/net80211/20150103-net80211-scan-overhaul-1.diff >> >> This splits the scan code into two halves - the generic bits that >> drive when and what to do about scanning, and the bits that >> implement the software scanner. > > Cannot be compiled on 11-CURRENT, see: > - -- stage 3.2: building everything > - -- > cd /usr/obj/usr/src/sys/KETAGALAN; MAKEOBJDIRPREFIX=/usr/obj > MACHINE_ARCH=amd64 MACHINE=amd64 CPUTYPE=corei7-avx > GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin > GROFF_FONT_PATH=/usr/obj/usr/s > rc/tmp/legacy/usr/share/groff_font > GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac > _SHLIBDIRPREFIX=/usr/obj/usr/src/tmp _LDSCRIPTROOT= VERSION="FreeBSD > 11.0-CURRENT amd64 1100052" IN > STALL="sh /usr/src/tools/install.sh" > PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr > /src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin > CC="cc " CXX="c++ " DEPFLAGS="" CPP="cpp " AS="as" AR="ar" LD="ld" > NM=nm OBJDUMP=objd > ump OBJCOPY="objcopy" RANLIB=ranlib STRINGS= SIZE="size" make -m > /usr/src/share/mk KERNEL=kernel all -DNO_MODULES_OBJ > linking kernel.debug > ieee80211_scan.o: In function `ieee80211_scan_attach': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x6): undefined > reference to `ieee80211_swscan_attach' > ieee80211_scan.o: In function `ieee80211_scan_detach': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x16): undefined > reference to `ieee80211_swscan_detach' > ieee80211_scan.o: In function `ieee80211_scan_vattach': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x8b): undefined > reference to `ieee80211_swscan_vattach' > ieee80211_scan.o: In function `ieee80211_scan_vdetach': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x10b): undefined > reference to `ieee80211_swscan_vdetach' > ieee80211_scan.o: In function `ieee80211_start_scan_locked': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x812): undefined > reference to `ieee80211_swscan_set_scan_duration' > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x8b0): undefined > reference to `ieee80211_swscan_run_scan_task' > ieee80211_scan.o: In function `ieee80211_start_scan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x94e): undefined > reference to `ieee80211_swscan_start_scan' > ieee80211_scan.o: In function `ieee80211_check_scan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xbbb): undefined > reference to `ieee80211_swscan_check_scan' > ieee80211_scan.o: In function `ieee80211_bg_scan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xcc5): undefined > reference to `ieee80211_swscan_bg_scan' > ieee80211_scan.o: In function `ieee80211_cancel_scan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd06): undefined > reference to `ieee80211_swscan_cancel_scan' > ieee80211_scan.o: In function `ieee80211_cancel_anyscan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd16): undefined > reference to `ieee80211_swscan_cancel_anyscan' > ieee80211_scan.o: In function `ieee80211_scan_next': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd26): undefined > reference to `ieee80211_swscan_scan_next' > ieee80211_scan.o: In function `ieee80211_scan_done': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xdd3): undefined > reference to `ieee80211_swscan_scan_done' > ieee80211_scan.o: In function `ieee80211_probe_curchan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xe64): undefined > reference to `ieee80211_swscan_probe_curchan' > ieee80211_scan.o: In function `ieee80211_add_scan': > /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x1036): undefined > reference to `ieee80211_swscan_add_scan' > ieee80211_scan_sta.o: In function `sta_attach': > /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x102): undefined > reference to `M_80211_SCAN' > ieee80211_scan_sta.o: In function `sta_detach': > /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x224): undefined > reference to `M_80211_SCAN' > /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x265): undefined > reference to `M_80211_SCAN' > ieee80211_scan_sta.o: In function `sta_flush': > /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x614): undefined > reference to `M_80211_SCAN' > ieee80211_scan_sta.o: In function `
Re: [rft] net80211 scan overhaul, pass 1
-BEGIN PGP SIGNED MESSAGE- Hash: SHA256 On 01/03/2015 20:46, Adrian Chadd wrote: > hi all, > > I've started overhauling the net80211 scan infrastructure so it > can support fully-offloaded scan firmware (like the intel iwn(4) > NICs, and the upcoming 7260 driver I'm hacking on.) > > I'd like this patch tested: > > https://people.freebsd.org/~adrian/net80211/20150103-net80211-scan-overhaul-1.diff > > This splits the scan code into two halves - the generic bits that > drive when and what to do about scanning, and the bits that > implement the software scanner. Cannot be compiled on 11-CURRENT, see: - -- >>> stage 3.2: building everything - -- cd /usr/obj/usr/src/sys/KETAGALAN; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=amd64 MACHINE=amd64 CPUTYPE=corei7-avx GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin GROFF_FONT_PATH=/usr/obj/usr/s rc/tmp/legacy/usr/share/groff_font GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac _SHLIBDIRPREFIX=/usr/obj/usr/src/tmp _LDSCRIPTROOT= VERSION="FreeBSD 11.0-CURRENT amd64 1100052" IN STALL="sh /usr/src/tools/install.sh" PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/usr/games:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr /src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/usr/obj/usr/src/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin CC="cc " CXX="c++ " DEPFLAGS="" CPP="cpp " AS="as" AR="ar" LD="ld" NM=nm OBJDUMP=objd ump OBJCOPY="objcopy" RANLIB=ranlib STRINGS= SIZE="size" make -m /usr/src/share/mk KERNEL=kernel all -DNO_MODULES_OBJ linking kernel.debug ieee80211_scan.o: In function `ieee80211_scan_attach': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x6): undefined reference to `ieee80211_swscan_attach' ieee80211_scan.o: In function `ieee80211_scan_detach': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x16): undefined reference to `ieee80211_swscan_detach' ieee80211_scan.o: In function `ieee80211_scan_vattach': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x8b): undefined reference to `ieee80211_swscan_vattach' ieee80211_scan.o: In function `ieee80211_scan_vdetach': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x10b): undefined reference to `ieee80211_swscan_vdetach' ieee80211_scan.o: In function `ieee80211_start_scan_locked': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x812): undefined reference to `ieee80211_swscan_set_scan_duration' /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x8b0): undefined reference to `ieee80211_swscan_run_scan_task' ieee80211_scan.o: In function `ieee80211_start_scan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x94e): undefined reference to `ieee80211_swscan_start_scan' ieee80211_scan.o: In function `ieee80211_check_scan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xbbb): undefined reference to `ieee80211_swscan_check_scan' ieee80211_scan.o: In function `ieee80211_bg_scan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xcc5): undefined reference to `ieee80211_swscan_bg_scan' ieee80211_scan.o: In function `ieee80211_cancel_scan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd06): undefined reference to `ieee80211_swscan_cancel_scan' ieee80211_scan.o: In function `ieee80211_cancel_anyscan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd16): undefined reference to `ieee80211_swscan_cancel_anyscan' ieee80211_scan.o: In function `ieee80211_scan_next': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xd26): undefined reference to `ieee80211_swscan_scan_next' ieee80211_scan.o: In function `ieee80211_scan_done': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xdd3): undefined reference to `ieee80211_swscan_scan_done' ieee80211_scan.o: In function `ieee80211_probe_curchan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0xe64): undefined reference to `ieee80211_swscan_probe_curchan' ieee80211_scan.o: In function `ieee80211_add_scan': /usr/src/sys/net80211/ieee80211_scan.c:(.text+0x1036): undefined reference to `ieee80211_swscan_add_scan' ieee80211_scan_sta.o: In function `sta_attach': /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x102): undefined reference to `M_80211_SCAN' ieee80211_scan_sta.o: In function `sta_detach': /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x224): undefined reference to `M_80211_SCAN' /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x265): undefined reference to `M_80211_SCAN' ieee80211_scan_sta.o: In function `sta_flush': /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x614): undefined reference to `M_80211_SCAN' ieee80211_scan_sta.o: In function `sta_add': /usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0x90d): undefined reference to `M_80211_SCAN' ieee80211_scan_sta.o:/usr/src/sys/net80211/ieee80211_scan_sta.c:(.text+0xe7d): more undefined references to `M_80211_SCAN' follow *** Error code 1 -BEGIN PGP SIGNATURE- Version: GnuPG v2 iF4EAREIAAYFAlSq8RkACgkQSfBQu3oOwYw8WAD7BXtRXL