{"id":13497117,"url":"https://github.com/bastibl/gr-ieee802-11","last_synced_at":"2025-05-14T21:04:05.801Z","repository":{"id":7629532,"uuid":"8989077","full_name":"bastibl/gr-ieee802-11","owner":"bastibl","description":"IEEE 802.11 a/g/p Transceiver","archived":false,"fork":false,"pushed_at":"2025-03-06T15:13:08.000Z","size":1068,"stargazers_count":786,"open_issues_count":7,"forks_count":300,"subscribers_count":54,"default_branch":"maint-3.10","last_synced_at":"2025-04-01T10:06:26.313Z","etag":null,"topics":["802-11","ieee","sdr","wifi"],"latest_commit_sha":null,"homepage":"https://wime-project.net/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bastibl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-03-24T16:26:18.000Z","updated_at":"2025-04-01T09:44:42.000Z","dependencies_parsed_at":"2024-11-14T18:00:41.481Z","dependency_job_id":null,"html_url":"https://github.com/bastibl/gr-ieee802-11","commit_stats":{"total_commits":333,"total_committers":24,"mean_commits":13.875,"dds":"0.48048048048048053","last_synced_commit":"ce7097384bb29f9e73777cf1458a072a90430528"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastibl%2Fgr-ieee802-11","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastibl%2Fgr-ieee802-11/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastibl%2Fgr-ieee802-11/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastibl%2Fgr-ieee802-11/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bastibl","download_url":"https://codeload.github.com/bastibl/gr-ieee802-11/tar.gz/refs/heads/maint-3.10","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247829490,"owners_count":21002995,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["802-11","ieee","sdr","wifi"],"created_at":"2024-07-31T20:00:23.755Z","updated_at":"2025-04-08T11:06:53.982Z","avatar_url":"https://github.com/bastibl.png","language":"C++","funding_links":[],"categories":["\u003ca id=\"1233584261c0cd5224b6e90a98cc9a94\"\u003e\u003c/a\u003e渗透\u0026\u0026offensive\u0026\u0026渗透框架\u0026\u0026后渗透框架","\u003ca id=\"d4efda1853b2cb0909727188116a2a8c\"\u003e\u003c/a\u003e未分类-WiFi","\u003ca name=\"cpp\"\u003e\u003c/a\u003eC++","GnuRadio Software"],"sub_categories":["\u003ca id=\"39931e776c23e80229368dfc6fd54770\"\u003e\u003c/a\u003e无线\u0026\u0026WiFi\u0026\u0026AP\u0026\u0026802.11","\u003ca id=\"37ca6907aa42dfd32db5973ff9eec83d\"\u003e\u003c/a\u003e新添加的"],"readme":"Hi!\n\nThis an IEEE 802.11 a/g/p transceiver for GNU Radio that is fitted for operation\nwith Ettus N210s and B210s. Interoperability was tested with many off-the-shelf\nWiFi cards and IEEE 802.11p prototypes. The code can also be used in\nsimulations.\n\n# Table of Contents\n1. [Development](#development)\n\n1. [Installation](#installation)\n\n1. [Usage](#usage)\n\n1. [Troubleshooting](#troubleshooting)\n\n1. [Further information](#further-information)\n\n# Development\n\nLike GNU Radio, this module uses *maint* branches for development.\nThese branches are supposed to be used with the corresponding GNU Radio\nbranches. This means: the *maint-3.7* branch is compatible with GNU Radio 3.7,\n*maint-3.8* is compatible with GNU Radio 3.8, etc.\n\n\n# Installation\n\n\n## Dependencies\n\n\n### GNU Radio\n\nThere are several ways to install GNU Radio. You can use\n\n- [pybombs](http://gnuradio.org/redmine/projects/pybombs/wiki)\n- [pre-compiled binaries](http://gnuradio.org/redmine/projects/gnuradio/wiki/BinaryPackages)\n- [from source](http://gnuradio.org/redmine/projects/gnuradio/wiki/InstallingGRFromSource)\n\n\n### gr-foo\n\nI have some non project specific GNU Radio blocks in my gr-foo repo that are\nneeded. For example the Wireshark connector. You can find these blocks at\n[https://github.com/bastibl/gr-foo](https://github.com/bastibl/gr-foo). They are\ninstalled with the typical command sequence:\n\n    git clone https://github.com/bastibl/gr-foo\n    cd gr-foo\n    mkdir build\n    cd build\n    cmake ..\n    make\n    sudo make install\n    sudo ldconfig\n\n\n## Installation of gr-ieee802-11\n\nTo actually install the blocks do\n\n    git clone https://github.com/bastibl/gr-ieee802-11\n    cd gr-ieee802-11\n    mkdir build\n    cd build\n    cmake ..\n    make\n    sudo make install\n    sudo ldconfig\n\n### Adjust Maximum Shared Memory\nSince the transmitter is using the Tagged Stream blocks it has to store a\ncomplete frame in the buffer before processing it. The default maximum shared\nmemory might not be enough on most Linux systems. It can be increased with\n\n    sudo sysctl -w kernel.shmmax=2147483648\n\n\n### OFDM PHY\n\nThe physical layer is encapsulated in a hierarchical block to allow for a\nclearer transceiver structure in GNU Radio Companion. This hierarchical block is\nnot included in the installation process. You have to open\n```/examples/wifi_phy_hier.grc``` with GNU Radio Companion and build it. This\nwill install the block in ```~/.grc_gnuradio/```.\n\n\n### Check message port connections\n\nSometime the connections between the message ports (the gray ones in GNU Radio\nCompanion) break. Therefore, please open the flow graphs and assert that\neverything is connected. It should be pretty obvious how the blocks are supposed\nto be wired. Actually this should not happen anymore, so if your ports are still\nunconnected please drop me a mail.\n\n\n### Python OpenGL\n\nIf you want to run the receive demo (the one that plots the subcarrier\nconstellations), please assert that you have python-opengl installed. The nongl\nversion of the plot does not work for me.\n\n\n### Run volk_profile\n\nvolk_profile is part of GNU Radio. It benchmarks different SIMD implementations\non your PC and creates a configuration file that stores the fastest version of\nevery function. This can speed up the computation considerably and is required\nin order to deal with the high rate of incoming samples.\n\n\n### Calibrate your daughterboard\n\nIf you have a WBX, SBX, or CBX daughterboard you should calibrate it in order to\nminimize IQ imbalance and TX DC offsets. See the [application\nnotes](http://files.ettus.com/manual/page_calibration.html).\n\n\n# Checking your installation\n\nAs a first step I recommend to test the ```wifi_loopback.grc``` flow graph. This\nflow graph does not need any hardware and allows you to ensure that the software\npart is installed correctly. So open the flow graph and run it. If everything\nworks as intended you should see some decoded packets on the console.\n\n\n## Troubleshooting\n\nIf GRC complains that it can't find some blocks (other than performance counters\nand hierarchical blocks) like\n\n    \u003e\u003e\u003e Error: Block key \"ieee802_11_ofdm_mac\" not found in Platform - grc(GNU Radio Companion)\n    \u003e\u003e\u003e Error: Block key \"foo_packet_pad\" not found in Platform - grc(GNU Radio Companion)\n\nMost likely you used a different ```CMAKE_INSTALL_PREFIX``` for the module than\nfor GNU Radio. Therefore, the blocks of the module ended up in a different\ndirectory and GRC can't find them. You have to tell GRC where these blocks are\nby creating/adding to your ```~/.gnuradio/config.conf``` something like\n\n    [grc]\n    global_blocks_path = /opt/local/share/gnuradio/grc/blocks\n    local_blocks_path = /Users/basti/usr/share/gnuradio/grc/blocks\n\nBut with the directories that match your installation.\n\n\n# Usage\n\n\n## Simulation\n\nThe loopback flow graph should give you an idea of how simulations can be\nconducted. To ease use, most blocks have debugging and logging capabilities that\ncan generate traces of the simulation. You can read about the logging feature\nand how to use it on the [GNU Radio\nWiki](https://wiki.gnuradio.org/index.php/Logging).\n\n\n## Unidirectional communication\n\nAs first over the air test I recommend to try ```wifi_rx.grc``` and\n```wifi_tx.grc```. Just open the flow graphs in GNU Radio companion and execute\nthem. If it does not work out of the box, try to play around with the gain. If\neverything works as intended you should see similar output as in the\n```wifi_loopback.grc``` example.\n\n\n## Ad Hoc Network with WiFi card\n\n- The transceiver is currently connected to a TAP device, i.e. is a virtual\n  Ethernet interface. Therefore, we have no WiFi signaling like association\n  requests and hence, the transceiver can not \"join\" an ad hoc network. You have\n  to make some small changes to the kernel in order to convince you WiFi card to\n  send to this hosts nevertheless.\n- The transceiver can not respond to ACKs in time. This is kind of an\n  architectural limitation of USRP + GNU Radio since Ethernet and computations\n  on a normal CPU introduce some latency. You can set the number of ACK retries\n  to zero and handle retransmits on higher layers (-\u003e TCP).\n- RTS/CTS is not working for the same reason. You can however just disable this\n  mechanism.\n- Currently, there is no CSMA/CA mechanism, but this can be implemented on the\n  FPGA.\n\n\n# Troubleshooting\n\n- Please check compile and installation logs. They might contain interesting\n  information.\n- Did you calibrate your daughterboard?\n- Did you run volk_profile?\n- Did you try different gain settings?\n- Did you close the case of the devices?\n- Did you try real-time priority?\n- Did you compile GNU Radio and gr-ieee802-11 in release mode?\n- If you see warnings that ```blocks_ctrlport_monitor_performance``` is missing\n  that means that you installed GNU Radio without control port or performance\n  counters. These blocks allow you to monitor the performance of the transceiver\n  while it is running, but are not required. You can just delete them from the\n  flow graph.\n- The message\n\n    You must now use ifconfig to set its IP address. E.g.,\n    $ sudo ifconfig tap0 192.168.200.1\n\nis normal and is output by the TUN/Tap Block during startup. The configuration\nof the TUN/TAP interface is handled by the scripts in the ```apps``` folder.\n- Did you try to tune the RF frequency out of the band of interest (i.e. used\n  the LO offset menu of the flow graphs)?\n- If 'D's appear, it might be related to your Ethernet card. Assert that you\n  made the sysconf changes recommended by Ettus. Did you try to connect you PC\n  directly to the USRP without a switch in between?\n\n\n# Further information\n\nFor further information please checkout our project page\n[https://www.wime-project.net](https://www.wime-project.net)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbastibl%2Fgr-ieee802-11","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbastibl%2Fgr-ieee802-11","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbastibl%2Fgr-ieee802-11/lists"}