{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":402490561,"defaultBranch":"main","name":"vwifi","ownerLogin":"sysprog21","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-09-02T16:31:39.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/22310129?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1630600325.714137","currentOid":""},"activityList":{"items":[{"before":"db7245ec9b0e75bfcea76f5dde95b1072ca6cdd4","after":"0dfa5f7680e9bc9b1dd2bf4c04697c16ba16bd9f","ref":"refs/heads/main","pushedAt":"2024-07-14T07:18:14.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #70 from jychen0611/ad-hoc\n\nSupport ad hoc network","shortMessageHtmlLink":"Merge pull request #70 from jychen0611/ad-hoc"}},{"before":"a8bdf8a4405cbc5e25beb29bb1956bfac82ca303","after":"db7245ec9b0e75bfcea76f5dde95b1072ca6cdd4","ref":"refs/heads/main","pushedAt":"2024-06-05T05:43:29.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #68 from jychen0611/txpower\n\nSupport transmit power","shortMessageHtmlLink":"Merge pull request #68 from jychen0611/txpower"}},{"before":"d6d83a8ad11a2d8a607d831f2a21def9318d7fa0","after":"a8bdf8a4405cbc5e25beb29bb1956bfac82ca303","ref":"refs/heads/main","pushedAt":"2024-06-01T04:31:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Support data rate and MCS (#67)\n\nThis commit adds support for 802.11n High Throughput (HT) mode with the\r\nfollowing configuration:\r\n- PHY: 802.11n (HT)\r\n- Modulation: 64-QAM\r\n- Data Bandwidth: 20MHz\r\n- Spatial Streams: 4\r\n\r\nThe calculated data rate of 260 Mbps matches the expected value based\r\non the 802.11n modulation table:\r\n- Data Subcarriers: 52\r\n- Coded Bits per Subcarrier per Stream: 6\r\n- Coding Rate: 5/6\r\n- OFDM Symbol Duration: 3.2 μs\r\n- Guard Interval Duration: 0.8 μs","shortMessageHtmlLink":"Support data rate and MCS (#67)"}},{"before":"c1ca07fa499f9c087e2f51b775b96df84edecec5","after":"d6d83a8ad11a2d8a607d831f2a21def9318d7fa0","ref":"refs/heads/main","pushedAt":"2024-05-29T17:09:18.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #66 from jychen0611/readme_command\n\nFix commands in top-level documentation","shortMessageHtmlLink":"Merge pull request #66 from jychen0611/readme_command"}},{"before":"35ca058e767d87a7c809091ae910b2bf02687870","after":"c1ca07fa499f9c087e2f51b775b96df84edecec5","ref":"refs/heads/main","pushedAt":"2024-05-26T08:00:37.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #65 from jychen0611/payload\n\nFix buffer overflow","shortMessageHtmlLink":"Merge pull request #65 from jychen0611/payload"}},{"before":"308459f8eec16a8581387fe4f38dfed3e2f23cb9","after":"35ca058e767d87a7c809091ae910b2bf02687870","ref":"refs/heads/main","pushedAt":"2024-05-21T16:42:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Align with recent cfg80211 header (#63)\n\nStarting from Linux v6.7, several significant changes have been made to\r\nthe cfg80211 subsystem.\r\n1. The scan_width field is no longer present in the cfg80211_inform_bss\r\n structure. There really is not any support for scanning at different\r\n channel widths than 20 MHz since there is no way to set it.\r\n2. The parameters in the change_beacon function have been updated to\r\n cfg80211_ap_update. The change_beacon function now includes two\r\n additional parameters, fils_discovery and unsol_bcast_probe_resp.\r\n These two additional parameters are part of the cfg80211_ap_update\r\n structure.","shortMessageHtmlLink":"Align with recent cfg80211 header (#63)"}},{"before":"13841a164f91dbca04dc11ad8900628c95ebba87","after":"308459f8eec16a8581387fe4f38dfed3e2f23cb9","ref":"refs/heads/main","pushedAt":"2024-05-17T03:33:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Adopt more contemporary terminology (#62)","shortMessageHtmlLink":"Adopt more contemporary terminology (#62)"}},{"before":"952a2e9b53448bd95b3f416e9c7f41c6fb6fbfe8","after":"13841a164f91dbca04dc11ad8900628c95ebba87","ref":"refs/heads/main","pushedAt":"2024-03-08T01:07:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Fix typo","shortMessageHtmlLink":"Fix typo"}},{"before":"13ded87af2452ed037b516104d4d05824f20d1ba","after":"952a2e9b53448bd95b3f416e9c7f41c6fb6fbfe8","ref":"refs/heads/main","pushedAt":"2024-02-22T16:48:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"CI: Bump action:checkout version","shortMessageHtmlLink":"CI: Bump action:checkout version"}},{"before":"baf4714217e774e3f9a34902451ca339fd5d3954","after":"13ded87af2452ed037b516104d4d05824f20d1ba","ref":"refs/heads/main","pushedAt":"2024-02-22T07:01:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Bump copyright year","shortMessageHtmlLink":"Bump copyright year"}},{"before":"ff5f9e4fe610aea0ea6a668541918def4d9cf022","after":"baf4714217e774e3f9a34902451ca339fd5d3954","ref":"refs/heads/main","pushedAt":"2024-01-30T07:44:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Customize naming scheme for wiphy (#57)\n\nThe default phy%d naming for wiphy in linux kernel depends on the value\r\n of a static variable wiphy_counter. Since they never attempts to\r\n decrease the value of wiphy_counter even a wiphy is unregistered or\r\n freed, this behavior ensures the naming and indexing for wiphy will\r\n be absolutely unique.\r\n\r\nHowever, the kernel might have other projects also utilize wiphy\r\nstructure, which will cause some confusion of wiphy's index and naming\r\nwhen using `struct wiphy`. We implement a custom-made name vw_phy%d\r\nfor wiphy in our project, in order to separate the naming and indexing\r\nfor 'struct wiphy'.\r\n\r\nClose #54","shortMessageHtmlLink":"Customize naming scheme for wiphy (#57)"}},{"before":"f1f4b656e26ecfc44c26bcdf2f26c53e70cd92ed","after":"ff5f9e4fe610aea0ea6a668541918def4d9cf022","ref":"refs/heads/main","pushedAt":"2024-01-10T09:28:32.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #56 from vax-r/Enforce_Naming\n\nEnforce consistent naming scheme","shortMessageHtmlLink":"Merge pull request #56 from vax-r/Enforce_Naming"}},{"before":"7814d59e38cc4839c167a179742342ab4ef030bf","after":"f1f4b656e26ecfc44c26bcdf2f26c53e70cd92ed","ref":"refs/heads/main","pushedAt":"2024-01-04T05:49:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Fix typo (#55)","shortMessageHtmlLink":"Fix typo (#55)"}},{"before":"20d4a42ff659aa93701cf88a518b3847f508ab89","after":"7814d59e38cc4839c167a179742342ab4ef030bf","ref":"refs/heads/main","pushedAt":"2023-12-27T12:15:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Introduce a userspace tool (#53)\n\nThis commit introduces a userspace tool, vwifi-tool, which can\r\ndisplay the status of the driver and allows users to specify a\r\nblocklist.\r\n\r\nThis tool will show the status of the vwifi driver by reading\r\nfrom /sys/module/vwifi/initstate. Users can only set a blocklist\r\nfor the vwifi driver when it is loaded.\r\n\r\nUsers can run vwifi-tool with command-line options, parsed by\r\ngetopt(), to set or unset a user-specific blocklist pair. The\r\nblocklist will be copied and sent to the vwifi driver via a\r\nnetlink socket.\r\n\r\nClose #48","shortMessageHtmlLink":"Introduce a userspace tool (#53)"}},{"before":"b73795838b3d0d125c1f48b2de46a2f5a5d3eef9","after":"20d4a42ff659aa93701cf88a518b3847f508ab89","ref":"refs/heads/main","pushedAt":"2023-12-01T13:32:34.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #51 from vax-r/Fix_size_in_snprintf\n\nCorrect the used of snprintf in owinterface_add","shortMessageHtmlLink":"Merge pull request #51 from vax-r/Fix_size_in_snprintf"}},{"before":"3db379fb1a334f9485603138c8647c9b957f9ca0","after":"b73795838b3d0d125c1f48b2de46a2f5a5d3eef9","ref":"refs/heads/main","pushedAt":"2023-10-26T06:03:24.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #50 from willwillhi1/main\n\nUse spinlock when accessing vif_list","shortMessageHtmlLink":"Merge pull request #50 from willwillhi1/main"}},{"before":"f5b37a7e1df44a8bab0014a4784dc68293855bb9","after":"3db379fb1a334f9485603138c8647c9b957f9ca0","ref":"refs/heads/main","pushedAt":"2023-10-24T13:58:40.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #49 from willwillhi1/main\n\nSupport passive scan","shortMessageHtmlLink":"Merge pull request #49 from willwillhi1/main"}},{"before":"ffb7886fb56b8a7b44fbc27b47d6d31eb5ca621a","after":"f5b37a7e1df44a8bab0014a4784dc68293855bb9","ref":"refs/heads/main","pushedAt":"2023-09-15T18:00:06.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Rephrase","shortMessageHtmlLink":"Rephrase"}},{"before":"038b13dcb486ff06c2ee0e9a61dc208c13727895","after":"ffb7886fb56b8a7b44fbc27b47d6d31eb5ca621a","ref":"refs/heads/main","pushedAt":"2023-09-15T17:50:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Rephrase","shortMessageHtmlLink":"Rephrase"}},{"before":"ad2cb66130509b3f2ff9532f13f4183dadce3c27","after":"038b13dcb486ff06c2ee0e9a61dc208c13727895","ref":"refs/heads/main","pushedAt":"2023-09-15T17:38:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Support virtio-net (#45)\n\nThis patch provides preliminary support for virtio-net, enabling \r\ninter-guest communication with the correct settings.\r\n\r\nTo enable virtio support, we have made vwifi capable of recognizing\r\nvirtio-net devices by registering vwifi with the virtio driver and\r\nproviding the necessary probe/remove functions. Regarding virtqueues\r\n(referred to as vq), we currently have one RX vq and one TX vq\r\n(multi-queue support is not yet available):\r\n- TX vq: Whenever a frame needs to be sent, we add an output buffer to\r\n the TX vq and call virtqueue_kick() to transmit the data to the\r\n virtio-net device.\r\n- RX vq: Upon ndo_open(), we populate an input buffer into the RX vq and\r\n replenish the input buffer with each RX interrupt.\r\n\r\nIt is important to note that when putting/getting buffers or kicking\r\nbuffers, we must hold the virtio spinlock to ensure that no other\r\noperations occur on the vq simultaneously. Additionally, while acquiring\r\nthe spinlock, we should avoid calling dev_kfree_skb() (as it is not safe\r\nin interrupt context) and restrict ourselves to using kmalloc() with\r\nGFP_ATOMIC. We use spin_lock_irqsave() because the TX/RX completion\r\ninterrupt might be reentrant and could potentially lead to deadlocks.\r\n\r\nAs of now, vwifi does not support most of the virtio-net features. To\r\nprovide future support, our focus should initially be on implementing\r\nmulti-queue support and incorporating NAPI on the RX path.\r\n\r\nIn the context of vwifi management frames, originally, vwifi performed\r\nmanagement operations, such as cfg80211_ops->scan(), and handled the TX/RX\r\npath using a 'shortcut' method. This entailed acquiring the network\r\ninterface structures and struct owl_vif by iterating through the vif\r\nlist and locating the one with the same MAC address. This approach was\r\nfeasible only when all interfaces resided on the same host.\r\n\r\nTo address the challenge of dealing with vwifi spread across multiple\r\nmachines, we have introduced the concept of \"vwifi management frames.\"\r\n\r\nMany of these management frame types draw inspiration from IEEE 802.11\r\nmanagement frames, with minor adjustments made due to the fact that we\r\nare dealing with Ethernet frames. It is important to note that we\r\ntransmit these management frames with the Ethertype/length field set as\r\n\"length\" (i.e., 802.3 frames). This allows us to distinguish them from\r\ndata frames (Ethernet II).\r\n\r\nAdditionally, it is crucial to ensure that multi-octet fields follow\r\na specific byte order so that data is consistently interpreted across\r\ndifferent machines. We employ a little-endian byte order, making it\r\npossible for most machines to directly read the data. Multi-octet fields\r\nshould be of the __leX type, and the sender is responsible for calling\r\ncpu_to_leX() on the data to be transmitted. This enables the receiver to\r\nutilize leX_to_cpu() to access and store the data in its machine's byte\r\norder.\r\n\r\nFor a more comprehensive description of all management frame types\r\n(including how an STA handles frames from other BSS), please refer to the\r\ncomments in vwifi.c, located above the definition of enum\r\nVWIFI_VIRTIO_PACKET_TYPE.\r\n\r\nSigned-off-by: EN-WEI WU ","shortMessageHtmlLink":"Support virtio-net (#45)"}},{"before":"3630723762917f4560d58892266745606cd69b50","after":"ad2cb66130509b3f2ff9532f13f4183dadce3c27","ref":"refs/heads/main","pushedAt":"2023-09-01T00:43:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Fix typo (#47)","shortMessageHtmlLink":"Fix typo (#47)"}},{"before":"33abb33495f858abbb5436f952fae437e1d93306","after":"3630723762917f4560d58892266745606cd69b50","ref":"refs/heads/main","pushedAt":"2023-08-31T15:26:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Fix typo (#46)","shortMessageHtmlLink":"Fix typo (#46)"}},{"before":"b060f0e19f25a64da524cea15805ded86a0552d4","after":"33abb33495f858abbb5436f952fae437e1d93306","ref":"refs/heads/main","pushedAt":"2023-08-04T00:57:58.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #44 from moonlit-melody/patch-1\n\nFix typo","shortMessageHtmlLink":"Merge pull request #44 from moonlit-melody/patch-1"}},{"before":"9cd9ba39708928e769457c9c0740015daa23cb27","after":"b060f0e19f25a64da524cea15805ded86a0552d4","ref":"refs/heads/main","pushedAt":"2023-08-02T15:08:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Fix hyperlink (#43)\n\nThe path to virt_wifi.c had been moved.","shortMessageHtmlLink":"Fix hyperlink (#43)"}},{"before":"77bfcc2569121296e4fa8c8bce92f7b13ceeebaa","after":"9cd9ba39708928e769457c9c0740015daa23cb27","ref":"refs/heads/main","pushedAt":"2023-07-27T10:11:33.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #42 from rickywu0421/main\n\nrevert: eth_hw_addr_set not existent in older version","shortMessageHtmlLink":"Merge pull request #42 from rickywu0421/main"}},{"before":"6c6b22f468daaae5ca4039b938cb89a1592fef50","after":"77bfcc2569121296e4fa8c8bce92f7b13ceeebaa","ref":"refs/heads/main","pushedAt":"2023-07-19T09:10:07.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #41 from rickywu0421/main\n\nSupport WPA/WPA2","shortMessageHtmlLink":"Merge pull request #41 from rickywu0421/main"}},{"before":"2d60b24abbe28da166c29d264a2c4f4d8fb9af5c","after":"6c6b22f468daaae5ca4039b938cb89a1592fef50","ref":"refs/heads/main","pushedAt":"2023-07-14T09:23:53.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #40 from rickywu0421/main\n\nAvoid directly modifying ndev->dev_addr","shortMessageHtmlLink":"Merge pull request #40 from rickywu0421/main"}},{"before":"fc55f2f6990755a4a4257ec964e4116b18db82f0","after":"2d60b24abbe28da166c29d264a2c4f4d8fb9af5c","ref":"refs/heads/main","pushedAt":"2023-07-14T09:04:10.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #39 from rickywu0421/main\n\nReplace env variable by shell function","shortMessageHtmlLink":"Merge pull request #39 from rickywu0421/main"}},{"before":"19db2a3e8fa330d5146521e6729c64e591daf0cc","after":"fc55f2f6990755a4a4257ec964e4116b18db82f0","ref":"refs/heads/main","pushedAt":"2023-07-13T06:45:18.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #38 from rickywu0421/main\n\nUpdate cfg80211_ops->stop_ap() API signature","shortMessageHtmlLink":"Merge pull request #38 from rickywu0421/main"}},{"before":"07522b7d66e10c8876d53573d067e0473e6f2ff2","after":"19db2a3e8fa330d5146521e6729c64e591daf0cc","ref":"refs/heads/main","pushedAt":"2023-06-28T11:15:41.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jserv","name":"Jim Huang","path":"/jserv","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/478921?s=80&v=4"},"commit":{"message":"Merge pull request #36 from willwillhi1/patch1\n\nImplement `cfg80211_ops->dump_station`","shortMessageHtmlLink":"Merge pull request #36 from willwillhi1/patch1"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEft8AwQA","startCursor":null,"endCursor":null}},"title":"Activity · sysprog21/vwifi"}