Compare commits

..

100 Commits

Author SHA1 Message Date
John Crispin
2983d9ca2b ath11k-wifi: add trailing '\' in Makefile
This caused image to pop up builds with no BDF in the image.

Fixes: 1a305421 (ipq807x: add support for wallystech dr6018)
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-29 08:36:21 +02:00
John Crispin
2283a64e57 ipq807x: backport eBPF layer from v5.10 kernel
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 19:40:05 +02:00
John Crispin
1a3054218f ipq807x: add support for wallystech dr6018
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 19:40:05 +02:00
John Crispin
7d26b55cb5 Dockerfile: install llvm/clang
This is required by the bpf-header compat package.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 19:40:05 +02:00
John Crispin
cd85723609 ipq807x: fix v4.4 kernel-headers for BPF
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
6d922da9b8 backports: add iproute2 compile fix
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
6b81555bb2 backports: add bpf-headers compat layer
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
267157563e ucentral-schema: update to latest HEAD
1bdc8de update the qos scheme/renderer

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
6505ca0a8f hostapd: fix qos_map_set
The option was incorrectly masked by iw_enable.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
5cafdaea60 profiles: add qosify to the ap profile
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
4a3d4f5609 qosify: add new QoS package
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-28 10:15:58 +02:00
John Crispin
3085dc78ef ucode: update to latest HEAD
* adds resolv module

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-27 18:21:02 +02:00
John Crispin
897ab17137 ucentral-schema: update to latest HEAD
6b3bdb1 force dnsmasq reload after applying a config

Fixes: WIFI-5025
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 18:05:38 +02:00
John Crispin
840319e24f udevmand: update to latest HEAD
b5a68ca fix wrap around glitch

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 10:35:53 +02:00
John Crispin
00197d703e ath11k: fix regdb upload
Make ath11k honour latest regdb.

Fixes: WIFI-3256
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 10:27:47 +02:00
John Crispin
a290ad3764 ucentral-schema: update to latest HEAD
d59450b add bssid to radio stats

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 08:18:50 +02:00
John Crispin
972eea34eb ucentral-client: update to latest HEAD
0179c0f Drop 60s socket timeout

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 08:17:48 +02:00
John Crispin
851507921a hostapd: add wds fixes to AX hostapd
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 08:15:43 +02:00
John Crispin
b364ab3064 certificates: fix the file owner and permission of the certificates
This was breaking hostapd local-certificates support.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-22 07:58:20 +02:00
John Crispin
45143cc2c9 chilli-redirect: add uamsecret to list of possible options
Fixes: WIFI-4935
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-21 16:02:28 +02:00
John Crispin
895e501b93 hostapd: update to latest HEAD
This fixes an issue where WDS would not work reliably upon AP->STA transition.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-21 11:33:58 +02:00
John Crispin
7d9594c3c8 netifd: update to latest HEAD
This fixes an issue where WDS would not work reliably upon AP->STA transition.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-21 11:33:25 +02:00
John Crispin
485c689408 ipq807x: add support for wf194c4
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-20 08:23:04 +02:00
John Crispin
ec2e24e982 workflow: update wf-188 and ec-420 profile
This will let FMS properly pick the files up.

Fixes: WIFI-4929
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-18 10:10:07 +02:00
John Crispin
32f86e2d77 ucentral-event: update to latest HEAD
7b0d136 align event names

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-18 09:32:50 +02:00
John Crispin
53e73b24de ucentral-schema: update metric example
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-18 08:58:36 +02:00
John Crispin
e57dad9009 ucentral-schema: update to latest HEAD
0456fc4 telemetry task was not getting enqueued in the correct runqueue

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-18 08:58:17 +02:00
John Crispin
01c3ce4fc7 ucentral-wifi: update to latest HEAD
b6dd24f add bssid to wifi scan results

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-18 07:01:16 +02:00
John Crispin
6b3d2b8059 ipq40xx: add spw2ac1200-lan-poe profile
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-14 16:22:24 +02:00
John Crispin
ba079bea9f linksys_ea6350-v4: make sure the image land in S3 with the correct name
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-14 12:39:38 +02:00
John Crispin
f971f3a4d4 luci-mod-ucentral: the unit was not correctly rebooting after "save & apply"
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-14 12:12:42 +02:00
Stijn Tintel
32524c19bd This is required for Express Wi-Fi in bridged mode
Fixes: WIFI-4639
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2021-10-13 18:17:52 +02:00
John Crispin
966353e747 ucentral-schema: update to latest HEAD
73e9fbc open-flow: support OpenFlow bridged mode
ac24d7f drop vlan-id from the gre tunnel definition

Fixes: WIFI-4639
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-13 18:17:46 +02:00
John Crispin
37f30d95f8 ucentral-schema: update to latest HEAD
7e59b14 only generate docs if the tool is installed
e440ced open-flow: fix controller property type
b85abaf generate-reader.uc: introduce ip format
288997c open-flow: update generated files
e9d7049 generate.sh: generate schemareader.uc before docs

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-13 16:44:19 +02:00
John Crispin
e699bebac7 fbwifi: sync with latest HEAD
Fixes: WIFI-4910
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-13 14:08:12 +02:00
John Crispin
0e5ec91a12 luci: start using the upstream feed and move the maverick packages into the tree
Fixes: WIFI-4911
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-13 13:01:39 +02:00
John Crispin
3cad34e1b9 certififcates: reduce log noise when mounting the certificates partition
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-13 10:51:21 +02:00
Stijn Tintel
2c37a6983f openflow: sync changes from openwrt-packages
c05103da9 openvswitch: add option for OpenFlow datapath desc
 b2bfb572a openvswitch: fix build with libunbound
 9e45d4534 openvswitch: add option for failure mode

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2021-10-13 07:37:16 +02:00
John Crispin
330eead632 ipq40xx: improve SPW2AC1200 sysupgrade
with this fix it does not matter if the unit is in primary or secondary boot mode.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-12 18:25:57 +02:00
John Crispin
f1456f321a ipq807x: update eap102 bdf
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-12 18:25:42 +02:00
John Crispin
9152942d93 ucentral-schema: update to latest HEAD
60549a8 open-flow: use mode ssl by default
70d8465 openflow: remove duplicate code
2718e30 schema: add property to set OpenFlow datapath description

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-12 11:05:20 +02:00
John Crispin
f202250a68 ucentral-schema: update to latest HEAD
50d182c renderer: add missing support for hostapd_bss_raw and hostapd_iface_raw

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-12 10:53:49 +02:00
John Crispin
fad14af474 ipq40xx: improve EdgeCore-SPW2AC1200 sysupgrade
Make sure to always flash into the primary partition.

Signed-off-by: John Crispin <john@phrozen.org>
2021-10-12 08:13:11 +02:00
John Crispin
5a7bafede0 ucentral-schema: update to latest HEAD
8eb586b 11u domain operator name was a singleton but should be an array
4eb1560 iw_nai_realm was being written to uci using set and not add_list
a35a0ea add support for hs20_wan_metrics

Fixes: WIFI-4868
Fixes: WIFI-4869
Fixes: WIFI-4870
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-11 11:51:39 +02:00
John Crispin
6738a933ab ucentral-schema: add example vlan config for switches
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-09 08:11:16 +02:00
John Crispin
a46262aaaa hostapd: fix wpa3-eap modes
wpa3 was not setup correctly and wpa3-192 was missing

Fixes: WIFI-4281
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-07 14:08:17 +02:00
John Crispin
2988180211 maverick: fix feature on single port devices
On single port devices no logical lan interface was setup resulting in
clients associating not being provided with DHCP.

Fixes: WIFI-4641
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-07 09:07:37 +02:00
John Crispin
ec0d693d12 ath79: add certificates partition for indio device
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-05 16:38:32 +02:00
John Crispin
406dad6604 chilli: fix log spam when coova is not used
Fixes: WIFI-4471
Signed-off-by: John Crispin <john@phrozen.org>
2021-10-01 09:38:30 +02:00
John Crispin
b31b236646 mac80211: do not hard abort when iw times out
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-29 15:20:50 +02:00
John Crispin
0c379ed26c netifd: update to latest HEAD
e467e0f wireless: reset retry counter when setup succeeds
0e311d3 wireless: reset number of retries on config change
62e2bb5 main: poll process log stream even if processes are killed
fac471c wireless: process and close script file descriptor when rerunning setup
186f6ea wireless: display log messages for setup/teardown/retry
4d0c2ad wireless: fix applying wireless devices attributes on hotplug events

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-29 15:20:31 +02:00
Max
647d5c8a33 workflow: trigger testing workflow for new releases (#385)
Signed-off-by: Max Brenner <xamrennerb@gmail.com>
2021-09-29 14:19:52 +02:00
Stijn Tintel
7baf962bb8 fbwifi: update to git HEAD
b67be64 fbwifi: fix token validation script

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2021-09-29 14:19:21 +02:00
John Crispin
09c23e4f4d netifd: update to latest HEAD
5a4ac30 netifd: rework/fix device free handling

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-28 10:39:15 +02:00
John Crispin
5c82ff107e ucentral-schema: update to latest HEAD
The last update did not regenerate the reader properly

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-27 13:16:50 +02:00
John Crispin
5d642d0325 dynamic-vlan: fix regression introduced by the 21.02 update
board.json uses device instead of ifname.

Fixes: WIFI-4420
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-27 12:55:48 +02:00
John Crispin
a37ed25128 ipq807x: fixes wifi on wf194c
* the maple update broke the caldata extraction for 8x8 units

Fixes: WIFI-4418
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-27 10:05:10 +02:00
John Crispin
544e6ff3a3 Revert "ipq807x: fixes wifi on wf194c"
This reverts commit ab2ff431ee.
2021-09-27 10:05:04 +02:00
John Crispin
ab2ff431ee ipq807x: fixes wifi on wf194c
* the maple update broke the caldata extraction for 8x8 units

Fixes: WIFI-4418
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-27 09:59:46 +02:00
John Crispin
fd884e709b ipq806x/ipq807x: fix lan/wan mapping on ecw5410 and wf194
Fixes: WIFI-3706
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-25 11:06:39 +02:00
Stijn Tintel
a6140a494c fbwifi: update to git HEAD
9febd0a fbwifi: close file handles
 281e8fd fbwifi: allow HTTP/3
 2306d44 fbwifi: quote variables in firewall includes
 c6557bc fbwifi: set webroot for redirect uhttpd instance
 ec76371 fbwifi: wait for xtables lock in firewall includes
 7420154 fbwifi: handle duplicate arp entries
 cc31879 fbwifi: rework UCI state tracking
 594a4e0 fbwifi: fix custom HTTP status codes
 e0d9cca fbwifi: fix CORS for info
 4aa60db fbwifi: drop luci.sgi.cgi module from info
 7b2cf4d README: editing feeds.conf.default should be avoided
 b1adf01 fbwifi: document how to enable/disable

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2021-09-25 09:59:24 +02:00
John Crispin
d9b43c559a ucentral-schema: update to latest HEAD
* fix stations mac addr keyword inside telemetry

Fixes: WIFI-4282
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-25 09:53:59 +02:00
John Crispin
ebe982fad7 ucode: update to latest HEAD
This fixes the signed vs unsigned conversion problem inside telemetry

Fixes: WIFI-3040
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-25 09:49:30 +02:00
John Crispin
89ff811e94 profiles: add chilli-redirect to default profile
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-23 16:10:32 +02:00
John Crispin
7c030d452e ucentral-wifi: update to latest HEAD
* fix sta rssi reporting

Fixes: WIFI-4153
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-23 10:20:50 +02:00
John Crispin
24d64b4704 ipq807x: backport latest cake to v4.4
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-22 14:49:39 +02:00
John Crispin
2279c1ab7e netifd: update to latest HEAD
* fixes WDS problems due to hairping mode getting enabled

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-22 14:48:47 +02:00
John Crispin
fc223fae06 fbwifi: add the feed to the base package selection
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 18:37:58 +02:00
John Crispin
640e676753 maverick: do not provide uplink connectivity to connected clients
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 16:19:34 +02:00
John Crispin
650adaf7ad mac80211/ax: disable encap offload
* this was breaking wds

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 16:09:01 +02:00
John Crispin
f4129130dc pass-point: add missing hapd option
* allow setting the hs20 release from uci

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 10:44:50 +02:00
John Crispin
8fcd427384 ucentral-schema: update to latest HEAD
* add redsec multi realm and NAPTR support

Fixes: WIFI-3757
Fixes: WIFI-3759
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 10:44:50 +02:00
John Crispin
5f26f65e46 openvswitch: update to v2.15.1
* this merges several CVE fixes

Fixes: WIFI-3457
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 08:06:48 +02:00
John Crispin
16b70f20e9 Revert "openflow: update to 2.16.0"
This reverts commit 8b2b5a32d1.

Fixes: WIFI-4199
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-20 07:35:14 +02:00
John Crispin
3912a0a362 ucentral-schema: update ucentral-schema to latest HEAD
fixes WAP3 transition mode, which requires optional 11w.

Fixes: WIFI-4208
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-19 16:19:32 +02:00
Stijn Tintel
46342a2621 fbwifi: update to git HEAD
bf7b0c4 fbwifi: add SPDX and copyright headers
 5318143 fbwifi: open https port in FBWIFI_INPUT

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
2021-09-17 18:01:27 +02:00
John Crispin
a5a37a22ce ipq807x: disable pstore on ipq807x
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-17 10:05:24 +02:00
John Crispin
14d3c44184 ipq807x: backport pstore support
v4.4 was missing OF support for this feature.

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-16 15:27:20 +02:00
John Crispin
2c3becff4b ucentrtal-schema: openflow handler was not rendering mode correctly
Fixes: WIFI-4149
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-15 15:48:46 +02:00
John Crispin
cd6e94f201 ipq807x: add preliminary eap106 support
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-15 14:01:34 +02:00
John Crispin
017bfb6cd5 ucentral-schema: update to latest HEAD
In some situations the renderer was reporting rejects even if there were none.

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-15 09:46:21 +02:00
John Crispin
25e38d4ac4 ucentral-schema: update to latest HEAD
Fix online validation of the schema.

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-15 08:18:26 +02:00
John Crispin
5477419fd7 realtek: fix DMA bringup
A kernel option was missing.

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-15 08:18:02 +02:00
John Crispin
f520e4f5a9 workflow: add/remove a few boards
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-15 08:17:39 +02:00
John Crispin
a3813f4b5d mt7621: add linksys ea6350 and ea7200 support
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 17:05:08 +02:00
John Crispin
839bee5a6d ucentral-schema: derive hostname from label-mac if present
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 17:02:46 +02:00
John Crispin
3fa8e33a45 ipq807x: update eap102 BDF file
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 17:02:11 +02:00
John Crispin
8c52460881 mt76: update to latest HEAD
* fixes of_get_mac() build breakage

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 09:20:51 +02:00
John Crispin
0c9bc8a958 ipq50xx: add preliminary maple support
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 09:16:37 +02:00
John Crispin
8cd26b4b50 ipq807x: update to 11.4-CS
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-14 09:16:23 +02:00
John Crispin
8e511326d5 ucentral-client: decrease the base reconnect timer
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-13 17:20:15 +02:00
John Crispin
2d40fa3c55 mac80211: fix builds on ath79 targets
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-13 13:43:19 +02:00
John Crispin
f7f91aa5c0 ucentral-client/schema: add telemetry streaming support
Fixes: WIFI-3434
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-13 12:26:19 +02:00
John Crispin
f84eeb94f3 ucentral-wifi: add connected and idle time
Fixes: WIFI-3735
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-13 12:25:15 +02:00
John Crispin
4a1f6009cf ucentral-client: make the AP disconnect from the GW when the unit reboots
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-08 15:11:51 +02:00
John Crispin
99432b9ccb mac80211: rebase backport patch
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-08 12:38:04 +02:00
John Crispin
9008c7b9db ar71xx: drop support
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-08 07:50:14 +02:00
John Crispin
886b8cc103 ucentral-schema: update to latest HEAD
* minor fixes to handling of boolean values

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-07 05:03:45 +02:00
John Crispin
6ad420b218 .github: update workflow to reflect new branch names
Signed-off-by: John Crispin <john@phrozen.org>
2021-09-06 13:39:58 +02:00
John Crispin
0c422f721c mac80211: update to latest HEAD
There was a bad patch, causing tx bcast to not work some times.

Signed-off-by: John Crispin <john@phrozen.org>
2021-09-06 12:16:21 +02:00
887 changed files with 127556 additions and 162955 deletions

View File

@@ -2,7 +2,7 @@ name: Build OpenWrt/uCentral images
on:
push:
branches: [ uCentral-* ]
branches: [ main, next, staging-* ]
tags: [ v* ]
jobs:
@@ -11,7 +11,7 @@ jobs:
strategy:
fail-fast: false
matrix:
target: ['cig_wf188', 'cig_wf194c', 'cig_wf160d', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'indio_um-305ac', 'linksys_e8450-ubi', 'linksys_ea8300', 'mikrotik_nand', 'tplink_cpe210_v3', 'tplink_cpe510_v3', 'tplink_eap225_outdoor_v1', 'tplink_ec420', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9' ]
target: ['cig_wf188n', 'cig_wf194c', 'cig_wf194c4', 'cig_wf160d', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4.yml', 'indio_um-305ac', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'tp-link_ec420-g1', 'tplink_ex227', 'tplink_ex228', 'tplink_ex447', 'wallys_dr40x9' ]
steps:
- uses: actions/checkout@v2
@@ -61,3 +61,16 @@ jobs:
[ -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 s3 cp --acl public-read --content-type "application/json" "latest-upgrade.json" "s3://$AWS_S3_BUCKET_NAME/$JSON_NAME"
trigger-testing:
runs-on: ubuntu-latest
needs: build
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Trigger testing of release
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.WLAN_TESTING_PAT }}
repository: Telecominfraproject/wlan-testing
event-type: new-ap-release
client-payload: '{"ref": "${GITHUB_REF#refs/tags/}", "sha": "${{ github.sha }}"}'

View File

@@ -1,7 +1,7 @@
From 0b769e318e332d3bf8c7ab68b492cdc90dcb8e18 Mon Sep 17 00:00:00 2001
From b3305eb14bf4daabee1e49eafcb04a856744db99 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Sat, 4 Sep 2021 05:42:30 +0200
Subject: [PATCH 08/27] realtek: update to latest owrt HEAD
Subject: [PATCH 01/66] realtek: update to latest owrt HEAD
Signed-off-by: John Crispin <john@phrozen.org>
---
@@ -9,7 +9,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
.../realtek/base-files/etc/board.d/02_network | 12 +-
.../lib/preinit/05_set_preinit_iface_realtek | 13 -
.../lib/preinit/98_remove_preinit_realtek | 6 -
target/linux/realtek/config-5.4 | 30 +-
target/linux/realtek/config-5.4 | 31 +-
.../realtek/dts/rtl8380_netgear_gigabit.dtsi | 11 +-
.../realtek/dts/rtl8380_zyxel_gs1900-10hp.dts | 4 +-
.../realtek/dts/rtl8380_zyxel_gs1900-8.dts | 12 -
@@ -51,7 +51,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
.../realtek/patches-5.4/710-adt7470.patch | 20 +
.../realtek/patches-5.4/711-ec4100.patch | 150 +
.../linux/realtek/patches-5.4/712-fixes.patch | 23 +
46 files changed, 16262 insertions(+), 1623 deletions(-)
46 files changed, 16263 insertions(+), 1623 deletions(-)
delete mode 100644 target/linux/realtek/base-files/lib/preinit/05_set_preinit_iface_realtek
delete mode 100644 target/linux/realtek/base-files/lib/preinit/98_remove_preinit_realtek
delete mode 100644 target/linux/realtek/dts/rtl8380_zyxel_gs1900-8.dts
@@ -159,7 +159,7 @@ index dc5fdb059b..0000000000
-
-boot_hook_add preinit_main remove_switch
diff --git a/target/linux/realtek/config-5.4 b/target/linux/realtek/config-5.4
index 51025d5d89..ced5d5f7ae 100644
index 51025d5d89..cba448acb6 100644
--- a/target/linux/realtek/config-5.4
+++ b/target/linux/realtek/config-5.4
@@ -2,17 +2,18 @@ CONFIG_ARCH_32BIT_OFF_T=y
@@ -184,7 +184,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=15
CONFIG_CPU_BIG_ENDIAN=y
CONFIG_CPU_GENERIC_DUMP_TLB=y
@@ -40,14 +41,10 @@ CONFIG_DMA_NONCOHERENT_CACHE_SYNC=y
@@ -40,14 +41,11 @@ CONFIG_DMA_NONCOHERENT_CACHE_SYNC=y
CONFIG_DTC=y
CONFIG_EARLY_PRINTK=y
CONFIG_EARLY_PRINTK_8250=y
@@ -196,10 +196,11 @@ index 51025d5d89..ced5d5f7ae 100644
-CONFIG_FONT_8x16=y
-CONFIG_FONT_AUTOSELECT=y
-CONFIG_FONT_SUPPORT=y
+CONFIG_FORCE_MAX_ZONEORDER=13
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_GENERIC_ATOMIC64=y
CONFIG_GENERIC_CLOCKEVENTS=y
@@ -74,7 +71,9 @@ CONFIG_GENERIC_TIME_VSYSCALL=y
@@ -74,7 +72,9 @@ CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_RTL8231=y
CONFIG_GPIO_RTL838X=y
@@ -210,7 +211,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_GRO_CELLS=y
CONFIG_HANDLE_DOMAIN_IRQ=y
CONFIG_HARDWARE_WATCHPOINTS=y
@@ -89,6 +88,7 @@ CONFIG_HZ_PERIODIC=y
@@ -89,6 +89,7 @@ CONFIG_HZ_PERIODIC=y
CONFIG_I2C=y
CONFIG_I2C_ALGOBIT=y
CONFIG_I2C_BOARDINFO=y
@@ -218,7 +219,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_I2C_GPIO=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_IRQCHIP=y
@@ -107,6 +107,8 @@ CONFIG_MDIO_BUS=y
@@ -107,6 +108,8 @@ CONFIG_MDIO_BUS=y
CONFIG_MDIO_DEVICE=y
CONFIG_MDIO_I2C=y
CONFIG_MEMFD_CREATE=y
@@ -227,7 +228,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_MFD_SYSCON=y
CONFIG_MIGRATION=y
CONFIG_MIPS=y
@@ -138,7 +140,7 @@ CONFIG_NEED_PER_CPU_KM=y
@@ -138,7 +141,7 @@ CONFIG_NEED_PER_CPU_KM=y
CONFIG_NET_DEVLINK=y
CONFIG_NET_DSA=y
CONFIG_NET_DSA_RTL83XX=y
@@ -236,7 +237,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_NET_RTL838X=y
CONFIG_NET_SWITCHDEV=y
CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y
@@ -161,12 +163,17 @@ CONFIG_PINCTRL=y
@@ -161,12 +164,17 @@ CONFIG_PINCTRL=y
CONFIG_POWER_RESET=y
CONFIG_POWER_RESET_SYSCON=y
CONFIG_PSB6970_PHY=y
@@ -254,7 +255,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_SERIAL_MCTRL_GPIO=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SFP=y
@@ -175,7 +182,7 @@ CONFIG_SPI_MASTER=y
@@ -175,7 +183,7 @@ CONFIG_SPI_MASTER=y
CONFIG_SPI_MEM=y
CONFIG_SPI_RTL838X=y
CONFIG_SRCU=y
@@ -263,7 +264,7 @@ index 51025d5d89..ced5d5f7ae 100644
CONFIG_SWPHY=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_SYS_HAS_CPU_MIPS32_R1=y
@@ -187,8 +194,11 @@ CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
@@ -187,8 +195,11 @@ CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
CONFIG_SYS_SUPPORTS_MIPS16=y
CONFIG_TARGET_ISA_REV=2
CONFIG_TICK_CPU_ACCOUNTING=y

View File

@@ -1,17 +1,21 @@
From 3bc625814c04a24cdf16587c2adb2060a77a5e1a Mon Sep 17 00:00:00 2001
From c9e9ca475bc2eb90beb23a2c67c39389f8cb2527 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Thu, 27 May 2021 13:24:47 +0200
Subject: [PATCH 17/27] netifd: update to latest HEAD
Subject: [PATCH 01/58] netifd: update to latest HEAD
Signed-off-by: John Crispin <john@phrozen.org>
---
package/network/config/netifd/Makefile | 8 +++-----
.../netifd/patches/002-fix-dhcp-issue.patch | 17 +++++++++++++++++
2 files changed, 20 insertions(+), 5 deletions(-)
package/network/config/netifd/Makefile | 8 ++--
.../netifd/patches/002-fix-dhcp-issue.patch | 17 +++++++++
.../config/netifd/patches/100-script.patch | 21 +++++++++++
.../config/netifd/patches/hairpin.patch | 37 +++++++++++++++++++
4 files changed, 78 insertions(+), 5 deletions(-)
create mode 100644 package/network/config/netifd/patches/002-fix-dhcp-issue.patch
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 4b5f110da2..13c1d96ed7 100644
index 4b5f110da2..d41bddfd56 100644
--- a/package/network/config/netifd/Makefile
+++ b/package/network/config/netifd/Makefile
@@ -5,16 +5,14 @@ PKG_RELEASE:=1
@@ -21,9 +25,9 @@ index 4b5f110da2..13c1d96ed7 100644
-PKG_SOURCE_DATE:=2021-07-26
-PKG_SOURCE_VERSION:=440eb0647708274cc8d7d9e7c2bb0cfdfba90023
-PKG_MIRROR_HASH:=eed957036ab608fdc49bdf801fc5b4405fcd2a3a5e5d3343ec39898e156c10e9
+PKG_SOURCE_DATE:=2021-09-01
+PKG_SOURCE_VERSION:=300b1220fab38600f102bb8cfcc59a29ce41b095
+PKG_MIRROR_HASH:=310fa90059795b1c956f9822db712ecc58bc19725b0f05f98c9e0a6824c8ca36
+PKG_SOURCE_DATE:=2021-10-20
+PKG_SOURCE_VERSION:=c61a1d432b34babe230e49a82712608b07410fc3
+PKG_MIRROR_HASH:=2b040d039c560cbc04dfe1e496aa81f714a032db88986803728dd6b724c11cd2
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
PKG_LICENSE:=GPL-2.0
@@ -57,6 +61,76 @@ index 0000000000..6f1d2e708e
+ return;
+ default:
+ break;
diff --git a/package/network/config/netifd/patches/100-script.patch b/package/network/config/netifd/patches/100-script.patch
new file mode 100644
index 0000000000..e7ba83f4bb
--- /dev/null
+++ b/package/network/config/netifd/patches/100-script.patch
@@ -0,0 +1,21 @@
+Index: a/scripts/netifd-wireless.sh
+===================================================================
+--- a/scripts/netifd-wireless.sh
++++ b/scripts/netifd-wireless.sh
+@@ -252,11 +252,14 @@ wireless_vif_parse_encryption() {
+ auth_type=owe
+ ;;
+ wpa3-mixed*)
+- auth_type=eap-eap192
++ auth_type=eap-eap256
+ ;;
+- wpa3*)
++ wpa3-192*)
+ auth_type=eap192
+ ;;
++ wpa3*)
++ auth_type=eap256
++ ;;
+ psk3-mixed*|sae-mixed*)
+ auth_type=psk-sae
+ ;;
diff --git a/package/network/config/netifd/patches/hairpin.patch b/package/network/config/netifd/patches/hairpin.patch
new file mode 100644
index 0000000000..25515d75d4
--- /dev/null
+++ b/package/network/config/netifd/patches/hairpin.patch
@@ -0,0 +1,37 @@
+diff --git a/wireless.c b/wireless.c
+index b26c4e8c8f0b..bd847e72ab40 100644
+--- a/wireless.c
++++ b/wireless.c
+@@ -804,20 +804,13 @@ wireless_interface_init_config(struct wireless_interface *vif)
+ vif->network = cur;
+
+ cur = tb[VIF_ATTR_MODE];
+- if (cur)
+- vif->ap_mode = !strcmp(blobmsg_get_string(cur), "ap");
+-
+- if (!vif->ap_mode)
+- return;
++ vif->ap_mode = cur && !strcmp(blobmsg_get_string(cur), "ap");
+
+ cur = tb[VIF_ATTR_ISOLATE];
+- if (cur)
+- vif->isolate = blobmsg_get_bool(cur);
++ vif->isolate = vif->ap_mode && cur && blobmsg_get_bool(cur);
+
+ cur = tb[VIF_ATTR_PROXYARP];
+- if (cur)
+- vif->proxyarp = blobmsg_get_bool(cur);
+-
++ vif->proxyarp = vif->ap_mode && cur && blobmsg_get_bool(cur);
+ }
+
+ /* vlist update call for wireless interface list */
+@@ -846,8 +839,6 @@ vif_update(struct vlist_tree *tree, struct vlist_node *node_new,
+ wireless_interface_handle_link(vif_old, NULL, false);
+ free(vif_old->config);
+ vif_old->config = blob_memdup(vif_new->config);
+- vif_old->isolate = vif_new->isolate;
+- vif_old->ap_mode = vif_new->ap_mode;
+ wireless_interface_init_config(vif_old);
+ free(vif_new);
+ } else if (vif_new) {
--
2.25.1

View File

@@ -1,16 +1,17 @@
From 379e136c94ecb35b984e3ac7cc7ef493b60cb1b6 Mon Sep 17 00:00:00 2001
From 6718e9786f18dd1380e5977d224d13a5ff3df619 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Sat, 4 Sep 2021 05:47:27 +0200
Subject: [PATCH 18/27] mac80211: update to latest HEAD
Subject: [PATCH 02/58] mac80211: update to latest HEAD
Signed-off-by: John Crispin <john@phrozen.org>
---
package/kernel/mac80211/Makefile | 15 +-
package/kernel/mac80211/ath.mk | 14 +-
package/kernel/mac80211/ath.mk | 5 +-
package/kernel/mac80211/broadcom.mk | 4 +-
.../mac80211/files/lib/netifd/mac80211.sh | 36 -
.../files/lib/netifd/wireless/mac80211.sh | 184 ++-
.../files/lib/netifd/wireless/mac80211.sh | 186 ++-
.../mac80211/files/lib/wifi/mac80211.sh | 110 +-
.../patches/ath/120-owl-loader-compat.patch | 53 -
.../patches/ath/402-ath_regd_optional.patch | 2 +-
.../080-ath10k_thermal_config.patch | 2 +-
...21-ath10k_init_devices_synchronously.patch | 0
@@ -20,6 +21,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
...75-ath10k-use-tpt-trigger-by-default.patch | 0
...980-ath10k-fix-max-antenna-gain-unit.patch | 0
...-power-reduction-for-US-regulatory-d.patch | 0
...h10k-Try-to-get-mac-address-from-dts.patch | 42 +
.../201-ath5k-WAR-for-AR71xx-PCI-bug.patch | 0
.../411-ath5k_allow_adhoc_and_ap.patch | 0
.../420-ath5k_disable_fast_cc.patch | 0
@@ -55,6 +57,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
.../552-ath9k-ahb_of.patch} | 0
.../553-ath9k_of_gpio_mask.patch | 0
.../602-rt2x00-introduce-rt2x00eeprom.patch | 2 +-
...07-rt2x00-add_platform_data_mac_addr.patch | 11 +-
.../100-remove-cryptoapi-dependencies.patch | 699 ---------
.../patches/subsys/130-disable-fils.patch | 32 -
...aes-cmac-switch-to-shash-CMAC-driver.patch | 230 ---
@@ -62,15 +65,19 @@ Signed-off-by: John Crispin <john@phrozen.org>
...320-mac80211_hwsim-add-6GHz-channels.patch | 123 ++
...211_hwsim-make-6-GHz-channels-usable.patch | 74 +
...-remove-legacy-minstrel-rate-control.patch | 2 +-
...te-control-support-for-encap-offload.patch | 43 +-
...introduce-aql_enable-node-in-debugfs.patch | 111 ++
...ange-struct-txq_info-for-fewer-holes.patch | 39 +
...to-a-virtual-time-based-airtime-sche.patch | 1277 +++++++++++++++++
...bling-4-address-mode-on-a-sta-vif-af.patch | 72 +
...on-API-to-configure-SAR-power-limita.patch | 398 +++++
...mac80211-add-ieee80211_set_sar_specs.patch | 51 +
...eck-per-vif-offload_flags-in-Tx-path.patch | 26 +
.../500-mac80211_configure_antenna_gain.patch | 16 +-
64 files changed, 2420 insertions(+), 1087 deletions(-)
...the-dst-buffer-to-of_get_mac_address.patch | 237 +++
70 files changed, 2752 insertions(+), 1160 deletions(-)
delete mode 100644 package/kernel/mac80211/files/lib/netifd/mac80211.sh
delete mode 100644 package/kernel/mac80211/patches/ath/120-owl-loader-compat.patch
rename package/kernel/mac80211/patches/{ath => ath10k}/080-ath10k_thermal_config.patch (97%)
rename package/kernel/mac80211/patches/{ath => ath10k}/921-ath10k_init_devices_synchronously.patch (100%)
rename package/kernel/mac80211/patches/{ath => ath10k}/922-ath10k-increase-rx-buffer-size-to-2048.patch (100%)
@@ -79,6 +86,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
rename package/kernel/mac80211/patches/{ath => ath10k}/975-ath10k-use-tpt-trigger-by-default.patch (100%)
rename package/kernel/mac80211/patches/{ath => ath10k}/980-ath10k-fix-max-antenna-gain-unit.patch (100%)
rename package/kernel/mac80211/patches/{ath => ath10k}/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch (100%)
create mode 100644 package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch
rename package/kernel/mac80211/patches/{ath => ath5k}/201-ath5k-WAR-for-AR71xx-PCI-bug.patch (100%)
rename package/kernel/mac80211/patches/{ath => ath5k}/411-ath5k_allow_adhoc_and_ap.patch (100%)
rename package/kernel/mac80211/patches/{ath => ath5k}/420-ath5k_disable_fast_cc.patch (100%)
@@ -125,6 +133,8 @@ Signed-off-by: John Crispin <john@phrozen.org>
create mode 100644 package/kernel/mac80211/patches/subsys/383-mac80211-fix-enabling-4-address-mode-on-a-sta-vif-af.patch
create mode 100644 package/kernel/mac80211/patches/subsys/384-nl80211-add-common-API-to-configure-SAR-power-limita.patch
create mode 100644 package/kernel/mac80211/patches/subsys/385-mac80211-add-ieee80211_set_sar_specs.patch
create mode 100644 package/kernel/mac80211/patches/subsys/386-mac80211-check-per-vif-offload_flags-in-Tx-path.patch
create mode 100644 package/kernel/mac80211/patches/subsys/782-net-next-1-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch
diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
index dd9ec172ca..dd39c2d069 100644
@@ -187,7 +197,7 @@ index dd9ec172ca..dd39c2d069 100644
$(INSTALL_DIR) $(1)/etc/hotplug.d/ieee80211
$(INSTALL_DATA) ./files/mac80211.hotplug $(1)/etc/hotplug.d/ieee80211/10-wifi-detect
diff --git a/package/kernel/mac80211/ath.mk b/package/kernel/mac80211/ath.mk
index f209c95ba8..ad2860a98e 100644
index 24abb910ff..ad2860a98e 100644
--- a/package/kernel/mac80211/ath.mk
+++ b/package/kernel/mac80211/ath.mk
@@ -34,7 +34,7 @@ ifdef CONFIG_PACKAGE_MAC80211_TRACING
@@ -199,11 +209,9 @@ index f209c95ba8..ad2860a98e 100644
config-$(CONFIG_PACKAGE_ATH_DEBUG) += ATH_DEBUG ATH10K_DEBUG ATH9K_STATION_STATISTICS
config-$(CONFIG_PACKAGE_ATH_DFS) += ATH9K_DFS_CERTIFIED ATH10K_DFS_CERTIFIED
config-$(CONFIG_PACKAGE_ATH_SPECTRAL) += ATH9K_COMMON_SPECTRAL ATH10K_SPECTRAL
@@ -42,11 +42,11 @@ config-$(CONFIG_PACKAGE_ATH_DYNACK) += ATH9K_DYNACK
config-$(call config_package,ath9k) += ATH9K
@@ -43,9 +43,10 @@ config-$(call config_package,ath9k) += ATH9K
config-$(call config_package,ath9k-common) += ATH9K_COMMON
config-$(call config_package,owl-loader) += ATH9K_PCI_NO_EEPROM
-config-$(CONFIG_TARGET_ar71xx) += ATH9K_AHB
config-$(CONFIG_TARGET_ath79) += ATH9K_AHB
+config-$(CONFIG_TARGET_ar71xx) += ATH9K_AHB
config-$(CONFIG_TARGET_ipq40xx) += ATH10K_AHB
@@ -213,42 +221,6 @@ index f209c95ba8..ad2860a98e 100644
config-$(CONFIG_ATH9K_HWRNG) += ATH9K_HWRNG
config-$(CONFIG_ATH9K_SUPPORT_PCOEM) += ATH9K_PCOEM
config-$(CONFIG_ATH9K_TX99) += ATH9K_TX99
@@ -126,7 +126,7 @@ endef
define KernelPackage/ath
$(call KernelPackage/mac80211/Default)
TITLE:=Atheros common driver part
- DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ar71xx||TARGET_ath79||TARGET_ath25 +kmod-mac80211
+ DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ath79||TARGET_ath25 +kmod-mac80211
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath.ko
MENU:=1
endef
@@ -191,7 +191,7 @@ define KernelPackage/ath9k-common
TITLE:=Atheros 802.11n wireless devices (common code for ath9k and ath9k_htc)
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath9k
HIDDEN:=1
- DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ar71xx||TARGET_ath79 +kmod-ath +@DRIVER_11N_SUPPORT
+ DEPENDS+= @PCI_SUPPORT||USB_SUPPORT||TARGET_ath79 +kmod-ath +@DRIVER_11N_SUPPORT
FILES:= \
$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath9k/ath9k_common.ko \
$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
@@ -201,7 +201,7 @@ define KernelPackage/ath9k
$(call KernelPackage/mac80211/Default)
TITLE:=Atheros 802.11n PCI wireless cards support
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath9k
- DEPENDS+= @PCI_SUPPORT||TARGET_ar71xx||TARGET_ath79 +kmod-ath9k-common
+ DEPENDS+= @PCI_SUPPORT||TARGET_ath79 +kmod-ath9k-common
FILES:= \
$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath9k/ath9k.ko
AUTOLOAD:=$(call AutoProbe,ath9k)
@@ -231,7 +231,7 @@ define KernelPackage/ath9k/config
config ATH9K_UBNTHSR
bool "Support for Ubiquiti UniFi Outdoor+ access point"
- depends on PACKAGE_kmod-ath9k && (TARGET_ar71xx_generic||TARGET_ath79)
+ depends on PACKAGE_kmod-ath9k && TARGET_ath79
default y
endef
diff --git a/package/kernel/mac80211/broadcom.mk b/package/kernel/mac80211/broadcom.mk
index fb576c5809..473bbf597c 100644
--- a/package/kernel/mac80211/broadcom.mk
@@ -314,7 +286,7 @@ index 92e5c0e395..0000000000
- done
-}
diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
index 9a9c35fb5f..a58af1fef0 100644
index 9a9c35fb5f..a25e4ff9b2 100644
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -1,7 +1,6 @@
@@ -563,6 +535,15 @@ index 9a9c35fb5f..a58af1fef0 100644
[ -n "$phy" ] && return 0
}
[ -n "$macaddr" ] && {
@@ -528,7 +630,7 @@ mac80211_iw_interface_add() {
rc="$?"
}
- [ "$rc" != 0 ] && wireless_setup_failed INTERFACE_CREATION_FAILED
+ [ "$rc" != 0 ] && echo "Failed to create interface $ifname"
return $rc
}
@@ -689,14 +791,8 @@ mac80211_prepare_iw_htmode() {
case "$htmode" in
VHT20|HT20) iw_htmode=HT20;;
@@ -821,6 +802,65 @@ index 3e99f06693..6aa46b0c74 100644
set wireless.radio${devidx}.disabled=1
set wireless.default_radio${devidx}=wifi-iface
diff --git a/package/kernel/mac80211/patches/ath/120-owl-loader-compat.patch b/package/kernel/mac80211/patches/ath/120-owl-loader-compat.patch
deleted file mode 100644
index d1d6c9e2e3..0000000000
--- a/package/kernel/mac80211/patches/ath/120-owl-loader-compat.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Sat, 16 Nov 2019 19:25:24 +0100
-Subject: [PATCH] owl_loader: compatibility patch
-
-This patch includes OpenWrt specific changes that are
-not included in the upstream owl-loader.
-
-This includes a platform data handling changes for ar71xx.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-
---- a/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c
-+++ b/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c
-@@ -103,6 +103,7 @@ static void owl_fw_cb(const struct firmw
- {
- struct pci_dev *pdev = (struct pci_dev *)context;
- struct owl_ctx *ctx = (struct owl_ctx *)pci_get_drvdata(pdev);
-+ struct ath9k_platform_data *pdata = dev_get_platdata(&pdev->dev);
- struct pci_bus *bus;
-
- complete(&ctx->eeprom_load);
-@@ -118,6 +119,16 @@ static void owl_fw_cb(const struct firmw
- goto release;
- }
-
-+ if (pdata) {
-+ memcpy(pdata->eeprom_data, fw->data, fw->size);
-+
-+ /*
-+ * eeprom has been successfully loaded - pass the data to ath9k
-+ * but remove the eeprom_name, so it doesn't try to load it too.
-+ */
-+ pdata->eeprom_name = NULL;
-+ }
-+
- if (ath9k_pci_fixup(pdev, (const u16 *)fw->data, fw->size))
- goto release;
-
-@@ -137,8 +148,14 @@ release:
- static const char *owl_get_eeprom_name(struct pci_dev *pdev)
- {
- struct device *dev = &pdev->dev;
-+ struct ath9k_platform_data *pdata;
- char *eeprom_name;
-
-+ /* try the existing platform data first */
-+ pdata = dev_get_platdata(dev);
-+ if (pdata && pdata->eeprom_name)
-+ return pdata->eeprom_name;
-+
- dev_dbg(dev, "using auto-generated eeprom filename\n");
-
- eeprom_name = devm_kzalloc(dev, EEPROM_FILENAME_LEN, GFP_KERNEL);
diff --git a/package/kernel/mac80211/patches/ath/402-ath_regd_optional.patch b/package/kernel/mac80211/patches/ath/402-ath_regd_optional.patch
index bf87d3551a..3c9180b113 100644
--- a/package/kernel/mac80211/patches/ath/402-ath_regd_optional.patch
@@ -890,6 +930,54 @@ diff --git a/package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-redu
similarity index 100%
rename from package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch
rename to package/kernel/mac80211/patches/ath10k/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch
diff --git a/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch b/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch
new file mode 100644
index 0000000000..5f427f6b8f
--- /dev/null
+++ b/package/kernel/mac80211/patches/ath10k/984-ath10k-Try-to-get-mac-address-from-dts.patch
@@ -0,0 +1,42 @@
+From 22fb5991a44c78ff18ec0082dc90c809356eb893 Mon Sep 17 00:00:00 2001
+From: Ansuel Smith <ansuelsmth@gmail.com>
+Date: Sun, 27 Sep 2020 19:23:35 +0200
+Subject: [PATCH 1/2] ath10k: Try to get mac-address from dts
+
+Most of embedded device that have the ath10k wifi integrated store the
+mac-address in nvmem partitions. Try to fetch the mac-address using the
+standard 'of_get_mac_address' than in all the check also try to fetch the
+address using the nvmem api searching for a defined 'mac-address' cell.
+Mac-address defined in the dts have priority than any other address found.
+
+Tested-on: QCA9984 hw1.0 PCI 10.4
+
+Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
+---
+ drivers/net/wireless/ath/ath10k/core.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
+index 5f4e12196..9ed7b9883 100644
+--- a/drivers/net/wireless/ath/ath10k/core.c
++++ b/drivers/net/wireless/ath/ath10k/core.c
+@@ -8,6 +8,7 @@
+ #include <linux/module.h>
+ #include <linux/firmware.h>
+ #include <linux/of.h>
++#include <linux/of_net.h>
+ #include <linux/property.h>
+ #include <linux/dmi.h>
+ #include <linux/ctype.h>
+@@ -3062,6 +3068,8 @@ static int ath10k_core_probe_fw(struct ath10k *ar)
+
+ device_get_mac_address(ar->dev, ar->mac_addr, sizeof(ar->mac_addr));
+
++ of_get_mac_address(ar->dev->of_node, ar->mac_addr);
++
+ ret = ath10k_core_init_firmware_features(ar);
+ if (ret) {
+ ath10k_err(ar, "fatal problem with firmware features: %d\n",
+--
+2.27.0
+
diff --git a/package/kernel/mac80211/patches/ath/201-ath5k-WAR-for-AR71xx-PCI-bug.patch b/package/kernel/mac80211/patches/ath5k/201-ath5k-WAR-for-AR71xx-PCI-bug.patch
similarity index 100%
rename from package/kernel/mac80211/patches/ath/201-ath5k-WAR-for-AR71xx-PCI-bug.patch
@@ -1050,6 +1138,35 @@ index e74d9a9aa0..1c52132da6 100644
RT2X00_LIB_CRYPTO=
RT2X00_LIB_LEDS=
RT2X00_LIB_DEBUGFS=
diff --git a/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch b/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
index b5b2c61037..79f99ffdf4 100644
--- a/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
+++ b/package/kernel/mac80211/patches/rt2x00/607-rt2x00-add_platform_data_mac_addr.patch
@@ -1,19 +1,18 @@
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
-@@ -990,8 +990,13 @@ static void rt2x00lib_rate(struct ieee80
+@@ -990,6 +990,12 @@ static void rt2x00lib_rate(struct ieee80
void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
{
+ struct rt2x00_platform_data *pdata;
- const char *mac_addr;
-
++
+ pdata = rt2x00dev->dev->platform_data;
+ if (pdata && pdata->mac_address)
+ ether_addr_copy(eeprom_mac_addr, pdata->mac_address);
+
- mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
- if (!IS_ERR(mac_addr))
- ether_addr_copy(eeprom_mac_addr, mac_addr);
+ of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
+
+ if (!is_valid_ether_addr(eeprom_mac_addr)) {
--- a/include/linux/rt2x00_platform.h
+++ b/include/linux/rt2x00_platform.h
@@ -14,6 +14,7 @@
diff --git a/package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch b/package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch
deleted file mode 100644
index ca02dfb06f..0000000000
@@ -2267,6 +2384,64 @@ index 96ee595ac1..1cab2eb194 100644
CFLAGS_trace.o := -I$(src)
rc80211_minstrel-y := \
diff --git a/package/kernel/mac80211/patches/subsys/376-mac80211-add-rate-control-support-for-encap-offload.patch b/package/kernel/mac80211/patches/subsys/376-mac80211-add-rate-control-support-for-encap-offload.patch
index 43a4a1334d..f22b0d9849 100644
--- a/package/kernel/mac80211/patches/subsys/376-mac80211-add-rate-control-support-for-encap-offload.patch
+++ b/package/kernel/mac80211/patches/subsys/376-mac80211-add-rate-control-support-for-encap-offload.patch
@@ -7,24 +7,6 @@ The software rate control cannot deal with encap offload, so fix it.
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
---
---- a/net/mac80211/ieee80211_i.h
-+++ b/net/mac80211/ieee80211_i.h
-@@ -2024,6 +2024,15 @@ static inline void ieee80211_tx_skb(stru
- ieee80211_tx_skb_tid(sdata, skb, 7);
- }
-
-+static inline bool ieee80211_is_tx_data(struct sk_buff *skb)
-+{
-+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-+
-+ return info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP ||
-+ ieee80211_is_data(hdr->frame_control);
-+}
-+
- u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
- struct ieee802_11_elems *elems,
- u64 filter, u32 crc, u8 *transmitter_bssid,
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -297,15 +297,11 @@ void ieee80211_check_rate_mask(struct ie
@@ -117,3 +99,28 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
if (info->control.flags & IEEE80211_TX_CTRL_FAST_XMIT) {
struct sta_info *sta = container_of(txq->sta, struct sta_info,
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -6728,4 +6728,22 @@ struct sk_buff *ieee80211_get_fils_disco
+ struct sk_buff *
+ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif);
++
++/**
++ * ieee80211_is_tx_data - check if frame is a data frame
++ *
++ * The function is used to check if a frame is a data frame. Frames with
++ * hardware encapsulation enabled are data frames.
++ *
++ * @skb: the frame to be transmitted.
++ */
++static inline bool ieee80211_is_tx_data(struct sk_buff *skb)
++{
++ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
++ struct ieee80211_hdr *hdr = (void *) skb->data;
++
++ return info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP ||
++ ieee80211_is_data(hdr->frame_control);
++}
++
+ #endif /* MAC80211_H */
diff --git a/package/kernel/mac80211/patches/subsys/380-mac80211-introduce-aql_enable-node-in-debugfs.patch b/package/kernel/mac80211/patches/subsys/380-mac80211-introduce-aql_enable-node-in-debugfs.patch
new file mode 100644
index 0000000000..b21b671c10
@@ -3714,7 +3889,7 @@ index 0000000000..ba78f7a142
+
diff --git a/package/kernel/mac80211/patches/subsys/383-mac80211-fix-enabling-4-address-mode-on-a-sta-vif-af.patch b/package/kernel/mac80211/patches/subsys/383-mac80211-fix-enabling-4-address-mode-on-a-sta-vif-af.patch
new file mode 100644
index 0000000000..5a82f00c9e
index 0000000000..c1f77ff5d9
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/383-mac80211-fix-enabling-4-address-mode-on-a-sta-vif-af.patch
@@ -0,0 +1,72 @@
@@ -3768,7 +3943,7 @@ index 0000000000..5a82f00c9e
+ if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -2224,6 +2224,8 @@ void ieee80211_dynamic_ps_timer(struct t
+@@ -2215,6 +2215,8 @@ void ieee80211_dynamic_ps_timer(struct t
+ void ieee80211_send_nullfunc(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ bool powersave);
@@ -4251,6 +4426,38 @@ index 0000000000..c351bc812a
+ .reset_tid_config = ieee80211_reset_tid_config,
++ .set_sar_specs = ieee80211_set_sar_specs,
+ };
diff --git a/package/kernel/mac80211/patches/subsys/386-mac80211-check-per-vif-offload_flags-in-Tx-path.patch b/package/kernel/mac80211/patches/subsys/386-mac80211-check-per-vif-offload_flags-in-Tx-path.patch
new file mode 100644
index 0000000000..cfad1c3927
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/386-mac80211-check-per-vif-offload_flags-in-Tx-path.patch
@@ -0,0 +1,26 @@
+From: Ryder Lee <ryder.lee@mediatek.com>
+Date: Fri, 18 Jun 2021 04:38:59 +0800
+Subject: [PATCH] mac80211: check per vif offload_flags in Tx path
+
+offload_flags has been introduced to indicate encap status of each interface.
+An interface can encap offload at runtime, or if it has some extra limitations
+it can simply override the flags, so it's more flexible to check offload_flags
+in Tx path.
+
+Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
+Link: https://lore.kernel.org/r/177785418cf407808bf3a44760302d0647076990.1623961575.git.ryder.lee@mediatek.com
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -3309,6 +3309,9 @@ static bool ieee80211_amsdu_aggregate(st
+ if (!ieee80211_hw_check(&local->hw, TX_AMSDU))
+ return false;
+
++ if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED)
++ return false;
++
+ if (skb_is_gso(skb))
+ return false;
+
diff --git a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch
index febe42eb9d..b2ee61a6dc 100644
--- a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch
@@ -4318,6 +4525,249 @@ index febe42eb9d..b2ee61a6dc 100644
if (result)
return result;
}
diff --git a/package/kernel/mac80211/patches/subsys/782-net-next-1-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch b/package/kernel/mac80211/patches/subsys/782-net-next-1-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch
new file mode 100644
index 0000000000..5d94362155
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/782-net-next-1-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch
@@ -0,0 +1,237 @@
+From 83216e3988cd196183542937c9bd58b279f946af Mon Sep 17 00:00:00 2001
+From: Michael Walle <michael@walle.cc>
+Date: Mon, 12 Apr 2021 19:47:17 +0200
+Subject: of: net: pass the dst buffer to of_get_mac_address()
+
+of_get_mac_address() returns a "const void*" pointer to a MAC address.
+Lately, support to fetch the MAC address by an NVMEM provider was added.
+But this will only work with platform devices. It will not work with
+PCI devices (e.g. of an integrated root complex) and esp. not with DSA
+ports.
+
+There is an of_* variant of the nvmem binding which works without
+devices. The returned data of a nvmem_cell_read() has to be freed after
+use. On the other hand the return of_get_mac_address() points to some
+static data without a lifetime. The trick for now, was to allocate a
+device resource managed buffer which is then returned. This will only
+work if we have an actual device.
+
+Change it, so that the caller of of_get_mac_address() has to supply a
+buffer where the MAC address is written to. Unfortunately, this will
+touch all drivers which use the of_get_mac_address().
+
+Usually the code looks like:
+
+ const char *addr;
+ addr = of_get_mac_address(np);
+ if (!IS_ERR(addr))
+ ether_addr_copy(ndev->dev_addr, addr);
+
+This can then be simply rewritten as:
+
+ of_get_mac_address(np, ndev->dev_addr);
+
+Sometimes is_valid_ether_addr() is used to test the MAC address.
+of_get_mac_address() already makes sure, it just returns a valid MAC
+address. Thus we can just test its return code. But we have to be
+careful if there are still other sources for the MAC address before the
+of_get_mac_address(). In this case we have to keep the
+is_valid_ether_addr() call.
+
+The following coccinelle patch was used to convert common cases to the
+new style. Afterwards, I've manually gone over the drivers and fixed the
+return code variable: either used a new one or if one was already
+available use that. Mansour Moufid, thanks for that coccinelle patch!
+
+<spml>
+@a@
+identifier x;
+expression y, z;
+@@
+- x = of_get_mac_address(y);
++ x = of_get_mac_address(y, z);
+ <...
+- ether_addr_copy(z, x);
+ ...>
+
+@@
+identifier a.x;
+@@
+- if (<+... x ...+>) {}
+
+@@
+identifier a.x;
+@@
+ if (<+... x ...+>) {
+ ...
+ }
+- else {}
+
+@@
+identifier a.x;
+expression e;
+@@
+- if (<+... x ...+>@e)
+- {}
+- else
++ if (!(e))
+ {...}
+
+@@
+expression x, y, z;
+@@
+- x = of_get_mac_address(y, z);
++ of_get_mac_address(y, z);
+ ... when != x
+</spml>
+
+All drivers, except drivers/net/ethernet/aeroflex/greth.c, were
+compile-time tested.
+
+Suggested-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Michael Walle <michael@walle.cc>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ arch/arm/mach-mvebu/kirkwood.c | 3 +-
+ arch/powerpc/sysdev/tsi108_dev.c | 5 +-
+ drivers/net/ethernet/aeroflex/greth.c | 6 +--
+ drivers/net/ethernet/allwinner/sun4i-emac.c | 10 ++--
+ drivers/net/ethernet/altera/altera_tse_main.c | 7 +--
+ drivers/net/ethernet/arc/emac_main.c | 8 +--
+ drivers/net/ethernet/atheros/ag71xx.c | 7 +--
+ drivers/net/ethernet/broadcom/bcm4908_enet.c | 7 +--
+ drivers/net/ethernet/broadcom/bcmsysport.c | 7 +--
+ drivers/net/ethernet/broadcom/bgmac-bcma.c | 10 ++--
+ drivers/net/ethernet/broadcom/bgmac-platform.c | 11 ++--
+ drivers/net/ethernet/cadence/macb_main.c | 11 ++--
+ drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 8 +--
+ drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 5 +-
+ drivers/net/ethernet/davicom/dm9000.c | 10 ++--
+ drivers/net/ethernet/ethoc.c | 6 +--
+ drivers/net/ethernet/ezchip/nps_enet.c | 7 +--
+ drivers/net/ethernet/freescale/fec_main.c | 7 +--
+ drivers/net/ethernet/freescale/fec_mpc52xx.c | 7 +--
+ drivers/net/ethernet/freescale/fman/mac.c | 9 ++--
+ .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 5 +-
+ drivers/net/ethernet/freescale/gianfar.c | 8 +--
+ drivers/net/ethernet/freescale/ucc_geth.c | 5 +-
+ drivers/net/ethernet/hisilicon/hisi_femac.c | 7 +--
+ drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 7 +--
+ drivers/net/ethernet/lantiq_xrx200.c | 7 +--
+ drivers/net/ethernet/marvell/mv643xx_eth.c | 5 +-
+ drivers/net/ethernet/marvell/mvneta.c | 6 +--
+ .../net/ethernet/marvell/prestera/prestera_main.c | 11 ++--
+ drivers/net/ethernet/marvell/pxa168_eth.c | 9 +---
+ drivers/net/ethernet/marvell/sky2.c | 8 ++-
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c | 11 ++--
+ drivers/net/ethernet/micrel/ks8851_common.c | 7 ++-
+ drivers/net/ethernet/microchip/lan743x_main.c | 5 +-
+ drivers/net/ethernet/nxp/lpc_eth.c | 4 +-
+ drivers/net/ethernet/qualcomm/qca_spi.c | 10 ++--
+ drivers/net/ethernet/qualcomm/qca_uart.c | 9 +---
+ drivers/net/ethernet/renesas/ravb_main.c | 12 +++--
+ drivers/net/ethernet/renesas/sh_eth.c | 5 +-
+ .../net/ethernet/samsung/sxgbe/sxgbe_platform.c | 13 ++---
+ drivers/net/ethernet/socionext/sni_ave.c | 10 ++--
+ .../net/ethernet/stmicro/stmmac/dwmac-anarion.c | 2 +-
+ .../ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-generic.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c | 2 +-
+ .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-visconti.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 14 ++---
+ .../net/ethernet/stmicro/stmmac/stmmac_platform.h | 2 +-
+ drivers/net/ethernet/ti/am65-cpsw-nuss.c | 19 ++++---
+ drivers/net/ethernet/ti/cpsw.c | 7 +--
+ drivers/net/ethernet/ti/cpsw_new.c | 7 +--
+ drivers/net/ethernet/ti/davinci_emac.c | 8 +--
+ drivers/net/ethernet/ti/netcp_core.c | 7 +--
+ drivers/net/ethernet/wiznet/w5100-spi.c | 8 ++-
+ drivers/net/ethernet/wiznet/w5100.c | 2 +-
+ drivers/net/ethernet/xilinx/ll_temac_main.c | 8 +--
+ drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 15 +++---
+ drivers/net/ethernet/xilinx/xilinx_emaclite.c | 8 +--
+ drivers/net/wireless/ath/ath9k/init.c | 5 +-
+ drivers/net/wireless/mediatek/mt76/eeprom.c | 9 +---
+ drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 6 +--
+ drivers/of/of_net.c | 60 ++++++++++------------
+ drivers/staging/octeon/ethernet.c | 10 ++--
+ drivers/staging/wfx/main.c | 7 ++-
+ include/linux/of_net.h | 6 +--
+ include/net/dsa.h | 2 +-
+ net/dsa/dsa2.c | 2 +-
+ net/dsa/slave.c | 2 +-
+ net/ethernet/eth.c | 11 ++--
+ 85 files changed, 218 insertions(+), 364 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -618,7 +618,6 @@ static int ath9k_of_init(struct ath_soft
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+ enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
+- const char *mac;
+ char eeprom_name[100];
+ int ret;
+
+@@ -641,9 +640,7 @@ static int ath9k_of_init(struct ath_soft
+ ah->ah_flags |= AH_NO_EEP_SWAP;
+ }
+
+- mac = of_get_mac_address(np);
+- if (!IS_ERR(mac))
+- ether_addr_copy(common->macaddr, mac);
++ of_get_mac_address(np, common->macaddr);
+
+ return 0;
+ }
+--- a/drivers/net/wireless/mediatek/mt76/eeprom.c
++++ b/drivers/net/wireless/mediatek/mt76/eeprom.c
+@@ -90,15 +90,9 @@ out_put_node:
+ void
+ mt76_eeprom_override(struct mt76_dev *dev)
+ {
+-#ifdef CONFIG_OF
+ struct device_node *np = dev->dev->of_node;
+- const u8 *mac = NULL;
+
+- if (np)
+- mac = of_get_mac_address(np);
+- if (!IS_ERR_OR_NULL(mac))
+- ether_addr_copy(dev->macaddr, mac);
+-#endif
++ of_get_mac_address(np, dev->macaddr);
+
+ if (!is_valid_ether_addr(dev->macaddr)) {
+ eth_random_addr(dev->macaddr);
+--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
++++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+@@ -990,11 +990,7 @@ static void rt2x00lib_rate(struct ieee80
+
+ void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
+ {
+- const char *mac_addr;
+-
+- mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
+- if (!IS_ERR(mac_addr))
+- ether_addr_copy(eeprom_mac_addr, mac_addr);
++ of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
+
+ if (!is_valid_ether_addr(eeprom_mac_addr)) {
+ eth_random_addr(eeprom_mac_addr);
--
2.25.1

View File

@@ -1,14 +1,14 @@
From 3b094ed6b1602969f0dd71b48ed220d0caace7ab Mon Sep 17 00:00:00 2001
From beaf8ac8acf93bc617d3ed141c750fe1d4f2b047 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Sat, 4 Sep 2021 05:48:27 +0200
Subject: [PATCH 19/27] hostapd: update to latest HEAD
Subject: [PATCH 01/56] hostapd: update to latest HEAD
Signed-off-by: John Crispin <john@phrozen.org>
---
package/network/services/hostapd/Makefile | 15 +-
.../hostapd/files/hostapd-basic.config | 2 +-
.../hostapd/files/hostapd-full.config | 4 +-
.../network/services/hostapd/files/hostapd.sh | 141 +++++++--
.../network/services/hostapd/files/hostapd.sh | 181 +++++++++---
...-fix-frequency-setup-with-HE-enabled.patch | 196 -------------
...> 001-wolfssl-init-RNG-with-ECC-key.patch} | 11 +-
...-init-order-disable-pri-sec-channel-.patch | 126 --------
@@ -63,16 +63,17 @@ Signed-off-by: John Crispin <john@phrozen.org>
.../hostapd/patches/600-ubus_support.patch | 166 ++++++++---
.../hostapd/patches/700-wifi-reload.patch | 51 ++--
.../hostapd/patches/710-vlan_no_bridge.patch | 41 +++
.../patches/711-wds_bridge_force.patch | 26 ++
.../720-ACS-fix-channel-100-frequency.patch | 30 ++
.../patches/720-iface_max_num_sta.patch | 82 ++++++
.../hostapd/patches/730-ft_iface.patch | 38 +++
.../hostapd/patches/740-snoop_iface.patch | 66 +++++
.../hostapd/patches/740-snoop_iface.patch | 72 +++++
...ate-if-no-available-channel-is-found.patch | 37 ---
...of-secondary-device-types-for-P2P-gr.patch | 33 ---
.../services/hostapd/src/src/ap/ubus.c | 214 +++++++++++++-
.../services/hostapd/src/src/ap/ubus.h | 16 +
.../hostapd/src/src/utils/build_features.h | 2 -
67 files changed, 1277 insertions(+), 2334 deletions(-)
68 files changed, 1336 insertions(+), 2347 deletions(-)
delete mode 100644 package/network/services/hostapd/patches/001-HE-VHT-fix-frequency-setup-with-HE-enabled.patch
rename package/network/services/hostapd/patches/{802-wolfssl-init-RNG-with-ECC-key.patch => 001-wolfssl-init-RNG-with-ECC-key.patch} (76%)
delete mode 100644 package/network/services/hostapd/patches/002-mesh-fix-channel-init-order-disable-pri-sec-channel-.patch
@@ -103,6 +104,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
delete mode 100644 package/network/services/hostapd/patches/110-wolfssl-compile-fix.patch
delete mode 100644 package/network/services/hostapd/patches/120-reconfigure-wps-credentials.patch
create mode 100644 package/network/services/hostapd/patches/710-vlan_no_bridge.patch
create mode 100644 package/network/services/hostapd/patches/711-wds_bridge_force.patch
create mode 100644 package/network/services/hostapd/patches/720-ACS-fix-channel-100-frequency.patch
create mode 100644 package/network/services/hostapd/patches/720-iface_max_num_sta.patch
create mode 100644 package/network/services/hostapd/patches/730-ft_iface.patch
@@ -179,18 +181,31 @@ index df272e443a..61b6daf861 100644
# EAP-SAKE for the integrated EAP server
#CONFIG_EAP_SAKE=y
diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
index aa72e09eba..e941fa4f77 100644
index aa72e09eba..0265c0518a 100644
--- a/package/network/services/hostapd/files/hostapd.sh
+++ b/package/network/services/hostapd/files/hostapd.sh
@@ -49,6 +49,7 @@ hostapd_append_wpa_key_mgmt() {
@@ -48,13 +48,17 @@ hostapd_append_wpa_key_mgmt() {
;;
eap192)
append wpa_key_mgmt "WPA-EAP-SUITE-B-192"
+ append wpa_key_mgmt "WPA-EAP-SHA256"
[ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-EAP"
+ [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-EAP-SHA256"
;;
eap-eap192)
append wpa_key_mgmt "WPA-EAP-SUITE-B-192"
@@ -91,6 +92,7 @@ hostapd_add_log_config() {
- eap-eap192)
- append wpa_key_mgmt "WPA-EAP-SUITE-B-192"
+ eap-eap256)
append wpa_key_mgmt "WPA-EAP"
+ append wpa_key_mgmt "WPA-EAP-SHA256"
+ [ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-EAP"
+ ;;
+ eap256)
+ append wpa_key_mgmt "WPA-EAP-SHA256"
[ "${ieee80211r:-0}" -gt 0 ] && append wpa_key_mgmt "FT-EAP"
- [ "${ieee80211w:-0}" -gt 0 ] && append wpa_key_mgmt "WPA-EAP-SHA256"
;;
sae)
append wpa_key_mgmt "SAE"
@@ -91,6 +95,7 @@ hostapd_add_log_config() {
hostapd_common_add_device_config() {
config_add_array basic_rate
config_add_array supported_rates
@@ -198,7 +213,7 @@ index aa72e09eba..e941fa4f77 100644
config_add_string country country3
config_add_boolean country_ie doth
@@ -99,6 +101,10 @@ hostapd_common_add_device_config() {
@@ -99,6 +104,10 @@ hostapd_common_add_device_config() {
config_add_string require_mode
config_add_boolean legacy_rates
config_add_int cell_density
@@ -209,7 +224,7 @@ index aa72e09eba..e941fa4f77 100644
config_add_string acs_chan_bias
config_add_array hostapd_options
@@ -115,7 +121,8 @@ hostapd_prepare_device_config() {
@@ -115,7 +124,8 @@ hostapd_prepare_device_config() {
local base_cfg=
json_get_vars country country3 country_ie beacon_int:100 dtim_period:2 doth require_mode legacy_rates \
@@ -219,7 +234,7 @@ index aa72e09eba..e941fa4f77 100644
hostapd_set_log_options base_cfg
@@ -207,11 +214,16 @@ hostapd_prepare_device_config() {
@@ -207,11 +217,16 @@ hostapd_prepare_device_config() {
hostapd_add_rate brlist "$br"
done
@@ -236,7 +251,7 @@ index aa72e09eba..e941fa4f77 100644
json_get_values opts hostapd_options
for val in $opts; do
@@ -269,7 +281,7 @@ hostapd_common_add_bss_config() {
@@ -269,7 +284,7 @@ hostapd_common_add_bss_config() {
config_add_array domain_match domain_match2 domain_suffix_match domain_suffix_match2
config_add_string ieee80211w_mgmt_cipher
@@ -245,7 +260,7 @@ index aa72e09eba..e941fa4f77 100644
config_add_string vlan_tagged_interface vlan_bridge
config_add_string vlan_file
@@ -287,6 +299,7 @@ hostapd_common_add_bss_config() {
@@ -287,6 +302,7 @@ hostapd_common_add_bss_config() {
config_add_boolean wnm_sleep_mode wnm_sleep_mode_no_keys bss_transition
config_add_int time_advertisement
config_add_string time_zone
@@ -253,7 +268,7 @@ index aa72e09eba..e941fa4f77 100644
config_add_boolean ieee80211k rrm_neighbor_report rrm_beacon_report
@@ -311,6 +324,7 @@ hostapd_common_add_bss_config() {
@@ -311,6 +327,7 @@ hostapd_common_add_bss_config() {
config_add_array supported_rates
config_add_boolean sae_require_mfp
@@ -261,7 +276,7 @@ index aa72e09eba..e941fa4f77 100644
config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string'
@@ -319,7 +333,7 @@ hostapd_common_add_bss_config() {
@@ -319,23 +336,33 @@ hostapd_common_add_bss_config() {
config_add_int iw_ipaddr_type_availability iw_gas_address3
config_add_string iw_hessid iw_network_auth_type iw_qos_map_set
config_add_array iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm
@@ -270,7 +285,11 @@ index aa72e09eba..e941fa4f77 100644
config_add_boolean hs20 disable_dgaf osen
config_add_int anqp_domain_id
@@ -330,12 +344,22 @@ hostapd_common_add_bss_config() {
- config_add_int hs20_deauth_req_timeout
+ config_add_int hs20_deauth_req_timeout hs20_release
config_add_array hs20_oper_friendly_name
config_add_array osu_provider
config_add_array operator_icon
config_add_array hs20_conn_capab
config_add_string osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp
@@ -294,7 +313,7 @@ index aa72e09eba..e941fa4f77 100644
}
hostapd_set_vlan_file() {
@@ -387,7 +411,7 @@ append_iw_anqp_3gpp_cell_net() {
@@ -387,7 +414,7 @@ append_iw_anqp_3gpp_cell_net() {
if [ -z "$iw_anqp_3gpp_cell_net_conf" ]; then
iw_anqp_3gpp_cell_net_conf="$1"
else
@@ -303,7 +322,7 @@ index aa72e09eba..e941fa4f77 100644
fi
}
@@ -399,10 +423,22 @@ append_iw_nai_realm() {
@@ -399,10 +426,22 @@ append_iw_nai_realm() {
[ -n "$1" ] && append bss_conf "nai_realm=$1" "$N"
}
@@ -326,7 +345,7 @@ index aa72e09eba..e941fa4f77 100644
append_osu_provider_service_desc() {
append bss_conf "osu_service_desc=$1" "$N"
}
@@ -450,6 +486,7 @@ append_osu_provider() {
@@ -450,6 +489,7 @@ append_osu_provider() {
append bss_conf "osu_method_list=$osu_method_list" "$N"
config_list_foreach "$1" osu_service_desc append_osu_provider_service_desc
@@ -334,7 +353,7 @@ index aa72e09eba..e941fa4f77 100644
config_list_foreach "$1" osu_icon append_osu_icon
append bss_conf "$N"
@@ -459,6 +496,14 @@ append_hs20_conn_capab() {
@@ -459,6 +499,14 @@ append_hs20_conn_capab() {
[ -n "$1" ] && append bss_conf "hs20_conn_capab=$1" "$N"
}
@@ -349,7 +368,7 @@ index aa72e09eba..e941fa4f77 100644
append_airtime_sta_weight() {
[ -n "$1" ] && append bss_conf "airtime_sta_weight=$1" "$N"
}
@@ -482,10 +527,12 @@ hostapd_set_bss_options() {
@@ -482,10 +530,12 @@ hostapd_set_bss_options() {
macfilter ssid utf8_ssid wmm uapsd hidden short_preamble rsn_preauth \
iapp_interface eapol_version dynamic_vlan ieee80211w nasid \
acct_server acct_secret acct_port acct_interval \
@@ -364,7 +383,7 @@ index aa72e09eba..e941fa4f77 100644
set_default isolate 0
set_default maxassoc 0
@@ -506,6 +553,7 @@ hostapd_set_bss_options() {
@@ -506,6 +556,7 @@ hostapd_set_bss_options() {
set_default multi_ap 0
set_default airtime_bss_weight 0
set_default airtime_bss_limit 0
@@ -372,7 +391,7 @@ index aa72e09eba..e941fa4f77 100644
append bss_conf "ctrl_interface=/var/run/hostapd"
if [ "$isolate" -gt 0 ]; then
@@ -532,6 +580,7 @@ hostapd_set_bss_options() {
@@ -532,6 +583,7 @@ hostapd_set_bss_options() {
append bss_conf "uapsd_advertisement_enabled=$uapsd" "$N"
append bss_conf "utf8_ssid=$utf8_ssid" "$N"
append bss_conf "multi_ap=$multi_ap" "$N"
@@ -380,7 +399,7 @@ index aa72e09eba..e941fa4f77 100644
[ "$tdls_prohibit" -gt 0 ] && append bss_conf "tdls_prohibit=$tdls_prohibit" "$N"
@@ -550,6 +599,7 @@ hostapd_set_bss_options() {
@@ -550,19 +602,21 @@ hostapd_set_bss_options() {
append bss_conf "acct_server_shared_secret=$acct_secret" "$N"
[ -n "$acct_interval" ] && \
append bss_conf "radius_acct_interim_interval=$acct_interval" "$N"
@@ -388,7 +407,15 @@ index aa72e09eba..e941fa4f77 100644
}
case "$auth_type" in
@@ -563,6 +613,7 @@ hostapd_set_bss_options() {
- sae|owe|eap192|eap-eap192)
+ sae|owe|eap192|eap256)
set_default ieee80211w 2
set_default sae_require_mfp 1
;;
- psk-sae)
+ psk-sae|eap-eap256)
set_default ieee80211w 1
set_default sae_require_mfp 1
;;
esac
[ -n "$sae_require_mfp" ] && append bss_conf "sae_require_mfp=$sae_require_mfp" "$N"
@@ -396,7 +423,13 @@ index aa72e09eba..e941fa4f77 100644
local vlan_possible=""
@@ -604,7 +655,7 @@ hostapd_set_bss_options() {
@@ -599,12 +653,12 @@ hostapd_set_bss_options() {
vlan_possible=1
wps_possible=1
;;
- eap|eap192|eap-eap192)
+ eap|eap192|eap-eap256|eap256)
json_get_vars \
auth_server auth_secret auth_port \
dae_client dae_secret dae_port \
ownip radius_client_addr \
@@ -405,7 +438,7 @@ index aa72e09eba..e941fa4f77 100644
# radius can provide VLAN ID for clients
vlan_possible=1
@@ -616,18 +667,22 @@ hostapd_set_bss_options() {
@@ -616,18 +670,22 @@ hostapd_set_bss_options() {
set_default auth_port 1812
set_default dae_port 3799
@@ -432,15 +465,17 @@ index aa72e09eba..e941fa4f77 100644
[ -n "$ownip" ] && append bss_conf "own_ip_addr=$ownip" "$N"
[ -n "$radius_client_addr" ] && append bss_conf "radius_client_addr=$radius_client_addr" "$N"
@@ -700,6 +755,7 @@ hostapd_set_bss_options() {
@@ -699,7 +757,8 @@ hostapd_set_bss_options() {
}
append bss_conf "ssid=$ssid" "$N"
[ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge" "$N"
- [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge" "$N"
+ [ -n "$network_bridge" ] && append bss_conf "bridge=$network_bridge${N}wds_bridge=" "$N"
+ [ -n "$network_ifname" ] && append bss_conf "snoop_iface=$network_ifname" "$N"
[ -n "$iapp_interface" ] && {
local ifname
network_get_device ifname "$iapp_interface" || ifname="$iapp_interface"
@@ -740,7 +796,7 @@ hostapd_set_bss_options() {
@@ -740,7 +799,7 @@ hostapd_set_bss_options() {
append bss_conf "ftm_responder=1" "$N"
[ "$stationary_ap" -eq "1" ] && append bss_conf "stationary_ap=1" "$N"
[ -n "$lci" ] && append bss_conf "lci=$lci" "$N"
@@ -449,7 +484,7 @@ index aa72e09eba..e941fa4f77 100644
}
fi
@@ -764,6 +820,7 @@ hostapd_set_bss_options() {
@@ -764,6 +823,7 @@ hostapd_set_bss_options() {
;;
esac
@@ -457,7 +492,7 @@ index aa72e09eba..e941fa4f77 100644
append bss_conf "mobility_domain=$mobility_domain" "$N"
append bss_conf "ft_psk_generate_local=$ft_psk_generate_local" "$N"
append bss_conf "ft_over_ds=$ft_over_ds" "$N"
@@ -778,6 +835,13 @@ hostapd_set_bss_options() {
@@ -778,6 +838,13 @@ hostapd_set_bss_options() {
set_default r0_key_lifetime 10000
set_default pmk_r1_push 0
@@ -471,7 +506,25 @@ index aa72e09eba..e941fa4f77 100644
[ -n "$r1_key_holder" ] && append bss_conf "r1_key_holder=$r1_key_holder" "$N"
append bss_conf "r0_key_lifetime=$r0_key_lifetime" "$N"
append bss_conf "pmk_r1_push=$pmk_r1_push" "$N"
@@ -863,13 +927,17 @@ hostapd_set_bss_options() {
@@ -822,7 +889,16 @@ hostapd_set_bss_options() {
json_get_vars ieee80211w_mgmt_cipher ieee80211w_max_timeout ieee80211w_retry_timeout
append bss_conf "ieee80211w=$ieee80211w" "$N"
[ "$ieee80211w" -gt "0" ] && {
- append bss_conf "group_mgmt_cipher=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N"
+ case "$auth_type" in
+ eap192)
+ append bss_conf "group_mgmt_cipher=BIP-GMAC-256" "$N"
+ append bss_conf "group_cipher=GCMP-256" "$N"
+ ;;
+ *)
+ append bss_conf "group_mgmt_cipher=${ieee80211w_mgmt_cipher:-AES-128-CMAC}" "$N"
+ ;;
+ esac
+
[ -n "$ieee80211w_max_timeout" ] && \
append bss_conf "assoc_sa_query_max_timeout=$ieee80211w_max_timeout" "$N"
[ -n "$ieee80211w_retry_timeout" ] && \
@@ -863,13 +939,17 @@ hostapd_set_bss_options() {
}
[ -n "$vlan_possible" -a -n "$dynamic_vlan" ] && {
@@ -491,7 +544,7 @@ index aa72e09eba..e941fa4f77 100644
[ -n "$vlan_tagged_interface" ] && \
append bss_conf "vlan_tagged_interface=$vlan_tagged_interface" "$N"
[ -n "$vlan_file" ] && {
@@ -882,6 +950,7 @@ hostapd_set_bss_options() {
@@ -882,6 +962,7 @@ hostapd_set_bss_options() {
json_get_vars iw_hessid iw_venue_group iw_venue_type iw_network_auth_type
json_get_vars iw_roaming_consortium iw_domain_name iw_anqp_3gpp_cell_net iw_nai_realm
json_get_vars iw_anqp_elem iw_qos_map_set iw_ipaddr_type_availability iw_gas_address3
@@ -499,7 +552,12 @@ index aa72e09eba..e941fa4f77 100644
set_default iw_enabled 0
if [ "$iw_enabled" = "1" ]; then
@@ -910,6 +979,8 @@ hostapd_set_bss_options() {
@@ -905,11 +986,12 @@ hostapd_set_bss_options() {
[ -n "$iw_network_auth_type" ] && \
append bss_conf "network_auth_type=$iw_network_auth_type" "$N"
[ -n "$iw_gas_address3" ] && append bss_conf "gas_address3=$iw_gas_address3" "$N"
- [ -n "$iw_qos_map_set" ] && append bss_conf "qos_map_set=$iw_qos_map_set" "$N"
json_for_each_item append_iw_roaming_consortium iw_roaming_consortium
json_for_each_item append_iw_anqp_elem iw_anqp_elem
json_for_each_item append_iw_nai_realm iw_nai_realm
@@ -508,21 +566,36 @@ index aa72e09eba..e941fa4f77 100644
iw_domain_name_conf=
json_for_each_item append_iw_domain_name iw_domain_name
@@ -924,9 +995,11 @@ hostapd_set_bss_options() {
@@ -921,14 +1003,18 @@ hostapd_set_bss_options() {
[ -n "$iw_anqp_3gpp_cell_net_conf" ] && \
append bss_conf "anqp_3gpp_cell_net=$iw_anqp_3gpp_cell_net_conf" "$N"
fi
+ [ -n "$iw_qos_map_set" ] && append bss_conf "qos_map_set=$iw_qos_map_set" "$N"
local hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \
- osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp
+ osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp \
+ hs20_t_c_server_url
+ hs20_t_c_server_url hs20_release
json_get_vars hs20 disable_dgaf osen anqp_domain_id hs20_deauth_req_timeout \
- osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp
+ osu_ssid hs20_wan_metrics hs20_operating_class hs20_t_c_filename hs20_t_c_timestamp \
+ hs20_t_c_server_url
+ hs20_t_c_server_url hs20_release
set_default hs20 0
+ set_default hs20_release 1
set_default disable_dgaf $hs20
@@ -945,16 +1018,31 @@ hostapd_set_bss_options() {
set_default osen 0
set_default anqp_domain_id 0
@@ -936,6 +1022,7 @@ hostapd_set_bss_options() {
if [ "$hs20" = "1" ]; then
append bss_conf "hs20=1" "$N"
append_hs20_icons
+ append bss_conf "hs20_release=$hs20_release" "$N"
append bss_conf "disable_dgaf=$disable_dgaf" "$N"
append bss_conf "osen=$osen" "$N"
append bss_conf "anqp_domain_id=$anqp_domain_id" "$N"
@@ -945,16 +1032,31 @@ hostapd_set_bss_options() {
[ -n "$hs20_operating_class" ] && append bss_conf "hs20_operating_class=$hs20_operating_class" "$N"
[ -n "$hs20_t_c_filename" ] && append bss_conf "hs20_t_c_filename=$hs20_t_c_filename" "$N"
[ -n "$hs20_t_c_timestamp" ] && append bss_conf "hs20_t_c_timestamp=$hs20_t_c_timestamp" "$N"
@@ -555,7 +628,7 @@ index aa72e09eba..e941fa4f77 100644
set_default per_sta_vif 0
if [ "$per_sta_vif" -gt 0 ]; then
@@ -1079,16 +1167,16 @@ wpa_supplicant_set_fixed_freq() {
@@ -1079,16 +1181,16 @@ wpa_supplicant_set_fixed_freq() {
append network_data "frequency=$freq" "$N$T"
case "$htmode" in
NOHT) append network_data "disable_ht=1" "$N$T";;
@@ -576,7 +649,7 @@ index aa72e09eba..e941fa4f77 100644
*) append network_data "disable_vht=1" "$N$T";;
esac
}
@@ -1106,7 +1194,8 @@ wpa_supplicant_add_network() {
@@ -1106,19 +1208,21 @@ wpa_supplicant_add_network() {
ssid bssid key \
basic_rate mcast_rate \
ieee80211w ieee80211r \
@@ -585,8 +658,15 @@ index aa72e09eba..e941fa4f77 100644
+ default_disabled
case "$auth_type" in
sae|owe|eap192|eap-eap192)
@@ -1119,6 +1208,7 @@ wpa_supplicant_add_network() {
- sae|owe|eap192|eap-eap192)
+ sae|owe|eap-eap256)
set_default ieee80211w 2
;;
- psk-sae)
+ psk-sae|eap192|eap256)
set_default ieee80211w 1
;;
esac
set_default ieee80211r 0
set_default multi_ap 0
@@ -594,7 +674,7 @@ index aa72e09eba..e941fa4f77 100644
local key_mgmt='NONE'
local network_data=
@@ -1150,7 +1240,10 @@ wpa_supplicant_add_network() {
@@ -1150,7 +1254,10 @@ wpa_supplicant_add_network() {
scan_ssid=""
}
@@ -606,6 +686,15 @@ index aa72e09eba..e941fa4f77 100644
case "$auth_type" in
none) ;;
@@ -1186,7 +1293,7 @@ wpa_supplicant_add_network() {
fi
append network_data "$passphrase" "$N$T"
;;
- eap|eap192|eap-eap192)
+ eap|eap192|eap-eap256|eap256)
hostapd_append_wpa_key_mgmt
key_mgmt="$wpa_key_mgmt"
diff --git a/package/network/services/hostapd/patches/001-HE-VHT-fix-frequency-setup-with-HE-enabled.patch b/package/network/services/hostapd/patches/001-HE-VHT-fix-frequency-setup-with-HE-enabled.patch
deleted file mode 100644
index 37c17c50af..0000000000
@@ -5107,6 +5196,38 @@ index 0000000000..73db32e54a
+ } else if (os_strcmp(buf, "per_sta_vif") == 0) {
+ bss->ssid.per_sta_vif = atoi(pos);
+ } else if (os_strcmp(buf, "vlan_file") == 0) {
diff --git a/package/network/services/hostapd/patches/711-wds_bridge_force.patch b/package/network/services/hostapd/patches/711-wds_bridge_force.patch
new file mode 100644
index 0000000000..76a3547805
--- /dev/null
+++ b/package/network/services/hostapd/patches/711-wds_bridge_force.patch
@@ -0,0 +1,26 @@
+Index: hostapd-2021-05-22-b102f19b/hostapd/config_file.c
+===================================================================
+--- hostapd-2021-05-22-b102f19b.orig/hostapd/config_file.c
++++ hostapd-2021-05-22-b102f19b/hostapd/config_file.c
+@@ -2357,6 +2357,8 @@ static int hostapd_config_fill(struct ho
+ sizeof(conf->bss[0]->iface));
+ } else if (os_strcmp(buf, "bridge") == 0) {
+ os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
++ if (!bss->wds_bridge[0])
++ os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
+ } else if (os_strcmp(buf, "vlan_bridge") == 0) {
+ os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge));
+ } else if (os_strcmp(buf, "wds_bridge") == 0) {
+Index: hostapd-2021-05-22-b102f19b/src/ap/ap_drv_ops.c
+===================================================================
+--- hostapd-2021-05-22-b102f19b.orig/src/ap/ap_drv_ops.c
++++ hostapd-2021-05-22-b102f19b/src/ap/ap_drv_ops.c
+@@ -340,8 +340,6 @@ int hostapd_set_wds_sta(struct hostapd_d
+ return -1;
+ if (hapd->conf->wds_bridge[0])
+ bridge = hapd->conf->wds_bridge;
+- else if (hapd->conf->bridge[0])
+- bridge = hapd->conf->bridge;
+ return hapd->driver->set_wds_sta(hapd->drv_priv, addr, aid, val,
+ bridge, ifname_wds);
+ }
diff --git a/package/network/services/hostapd/patches/720-ACS-fix-channel-100-frequency.patch b/package/network/services/hostapd/patches/720-ACS-fix-channel-100-frequency.patch
new file mode 100644
index 0000000000..3ef19e5298
@@ -5277,12 +5398,14 @@ index 0000000000..793e8e0194
+ if (!hapd->l2) {
diff --git a/package/network/services/hostapd/patches/740-snoop_iface.patch b/package/network/services/hostapd/patches/740-snoop_iface.patch
new file mode 100644
index 0000000000..8d928f8505
index 0000000000..6e60cde844
--- /dev/null
+++ b/package/network/services/hostapd/patches/740-snoop_iface.patch
@@ -0,0 +1,66 @@
+--- a/src/ap/ap_config.h
++++ b/src/ap/ap_config.h
@@ -0,0 +1,72 @@
+Index: hostapd-2021-05-22-b102f19b/src/ap/ap_config.h
+===================================================================
+--- hostapd-2021-05-22-b102f19b.orig/src/ap/ap_config.h
++++ hostapd-2021-05-22-b102f19b/src/ap/ap_config.h
+@@ -278,6 +278,7 @@ struct hostapd_bss_config {
+ char iface[IFNAMSIZ + 1];
+ char bridge[IFNAMSIZ + 1];
@@ -5291,8 +5414,10 @@ index 0000000000..8d928f8505
+ char vlan_bridge[IFNAMSIZ + 1];
+ char wds_bridge[IFNAMSIZ + 1];
+
+--- a/src/ap/x_snoop.c
++++ b/src/ap/x_snoop.c
+Index: hostapd-2021-05-22-b102f19b/src/ap/x_snoop.c
+===================================================================
+--- hostapd-2021-05-22-b102f19b.orig/src/ap/x_snoop.c
++++ hostapd-2021-05-22-b102f19b/src/ap/x_snoop.c
+@@ -31,14 +31,16 @@ int x_snoop_init(struct hostapd_data *ha
+ return -1;
+ }
@@ -5336,12 +5461,14 @@ index 0000000000..8d928f8505
+ if (l2 == NULL) {
+ wpa_printf(MSG_DEBUG,
+ "x_snoop: Failed to initialize L2 packet processing %s",
+--- a/hostapd/config_file.c
++++ b/hostapd/config_file.c
+@@ -2357,6 +2357,8 @@ static int hostapd_config_fill(struct ho
+ sizeof(conf->bss[0]->iface));
+ } else if (os_strcmp(buf, "bridge") == 0) {
+Index: hostapd-2021-05-22-b102f19b/hostapd/config_file.c
+===================================================================
+--- hostapd-2021-05-22-b102f19b.orig/hostapd/config_file.c
++++ hostapd-2021-05-22-b102f19b/hostapd/config_file.c
+@@ -2359,6 +2359,8 @@ static int hostapd_config_fill(struct ho
+ os_strlcpy(bss->bridge, pos, sizeof(bss->bridge));
+ if (!bss->wds_bridge[0])
+ os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge));
++ } else if (os_strcmp(buf, "snoop_iface") == 0) {
++ os_strlcpy(bss->snoop_iface, pos, sizeof(bss->snoop_iface));
+ } else if (os_strcmp(buf, "vlan_bridge") == 0) {

View File

@@ -0,0 +1,247 @@
From 99b9f524e94b98ce8fd3e141bf7e07bfa96bbea0 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Tue, 14 Sep 2021 09:19:08 +0200
Subject: [PATCH] mt76: update to latest HEAD
Signed-off-by: John Crispin <john@phrozen.org>
---
package/kernel/mt76/Makefile | 7 +-
...the-dst-buffer-to-of_get_mac_address.patch | 206 ++++++++++++++++++
2 files changed, 210 insertions(+), 3 deletions(-)
create mode 100644 package/kernel/mt76/patches/001-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch
diff --git a/package/kernel/mt76/Makefile b/package/kernel/mt76/Makefile
index e4051d8347..431c57a240 100644
--- a/package/kernel/mt76/Makefile
+++ b/package/kernel/mt76/Makefile
@@ -8,11 +8,12 @@ PKG_LICENSE_FILES:=
PKG_SOURCE_URL:=https://github.com/openwrt/mt76
PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2021-06-06
-PKG_SOURCE_VERSION:=22b690334c0f49b11534cc2e331c9d5e17c4a0bc
-PKG_MIRROR_HASH:=ff5e563935919d2e40c1e7254ef3bc06f7ecc5e69f8ddd12903e8f5de942d630
+PKG_SOURCE_DATE:=2021-07-15
+PKG_SOURCE_VERSION:=bbebea7d6dc64313132226adc3f7369d36e9359d
+PKG_MIRROR_HASH:=17cd74e72c1f6c8742b698bf6772afacc6fba71b233af8c4d59530600cf44d5b
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
+PKG_USE_NINJA:=0
PKG_BUILD_PARALLEL:=1
PKG_CONFIG_DEPENDS += \
diff --git a/package/kernel/mt76/patches/001-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch b/package/kernel/mt76/patches/001-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch
new file mode 100644
index 0000000000..66075f2771
--- /dev/null
+++ b/package/kernel/mt76/patches/001-of-net-pass-the-dst-buffer-to-of_get_mac_address.patch
@@ -0,0 +1,206 @@
+From 83216e3988cd196183542937c9bd58b279f946af Mon Sep 17 00:00:00 2001
+From: Michael Walle <michael@walle.cc>
+Date: Mon, 12 Apr 2021 19:47:17 +0200
+Subject: of: net: pass the dst buffer to of_get_mac_address()
+
+of_get_mac_address() returns a "const void*" pointer to a MAC address.
+Lately, support to fetch the MAC address by an NVMEM provider was added.
+But this will only work with platform devices. It will not work with
+PCI devices (e.g. of an integrated root complex) and esp. not with DSA
+ports.
+
+There is an of_* variant of the nvmem binding which works without
+devices. The returned data of a nvmem_cell_read() has to be freed after
+use. On the other hand the return of_get_mac_address() points to some
+static data without a lifetime. The trick for now, was to allocate a
+device resource managed buffer which is then returned. This will only
+work if we have an actual device.
+
+Change it, so that the caller of of_get_mac_address() has to supply a
+buffer where the MAC address is written to. Unfortunately, this will
+touch all drivers which use the of_get_mac_address().
+
+Usually the code looks like:
+
+ const char *addr;
+ addr = of_get_mac_address(np);
+ if (!IS_ERR(addr))
+ ether_addr_copy(ndev->dev_addr, addr);
+
+This can then be simply rewritten as:
+
+ of_get_mac_address(np, ndev->dev_addr);
+
+Sometimes is_valid_ether_addr() is used to test the MAC address.
+of_get_mac_address() already makes sure, it just returns a valid MAC
+address. Thus we can just test its return code. But we have to be
+careful if there are still other sources for the MAC address before the
+of_get_mac_address(). In this case we have to keep the
+is_valid_ether_addr() call.
+
+The following coccinelle patch was used to convert common cases to the
+new style. Afterwards, I've manually gone over the drivers and fixed the
+return code variable: either used a new one or if one was already
+available use that. Mansour Moufid, thanks for that coccinelle patch!
+
+<spml>
+@a@
+identifier x;
+expression y, z;
+@@
+- x = of_get_mac_address(y);
++ x = of_get_mac_address(y, z);
+ <...
+- ether_addr_copy(z, x);
+ ...>
+
+@@
+identifier a.x;
+@@
+- if (<+... x ...+>) {}
+
+@@
+identifier a.x;
+@@
+ if (<+... x ...+>) {
+ ...
+ }
+- else {}
+
+@@
+identifier a.x;
+expression e;
+@@
+- if (<+... x ...+>@e)
+- {}
+- else
++ if (!(e))
+ {...}
+
+@@
+expression x, y, z;
+@@
+- x = of_get_mac_address(y, z);
++ of_get_mac_address(y, z);
+ ... when != x
+</spml>
+
+All drivers, except drivers/net/ethernet/aeroflex/greth.c, were
+compile-time tested.
+
+Suggested-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Michael Walle <michael@walle.cc>
+Reviewed-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ arch/arm/mach-mvebu/kirkwood.c | 3 +-
+ arch/powerpc/sysdev/tsi108_dev.c | 5 +-
+ drivers/net/ethernet/aeroflex/greth.c | 6 +--
+ drivers/net/ethernet/allwinner/sun4i-emac.c | 10 ++--
+ drivers/net/ethernet/altera/altera_tse_main.c | 7 +--
+ drivers/net/ethernet/arc/emac_main.c | 8 +--
+ drivers/net/ethernet/atheros/ag71xx.c | 7 +--
+ drivers/net/ethernet/broadcom/bcm4908_enet.c | 7 +--
+ drivers/net/ethernet/broadcom/bcmsysport.c | 7 +--
+ drivers/net/ethernet/broadcom/bgmac-bcma.c | 10 ++--
+ drivers/net/ethernet/broadcom/bgmac-platform.c | 11 ++--
+ drivers/net/ethernet/cadence/macb_main.c | 11 ++--
+ drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 8 +--
+ drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 5 +-
+ drivers/net/ethernet/davicom/dm9000.c | 10 ++--
+ drivers/net/ethernet/ethoc.c | 6 +--
+ drivers/net/ethernet/ezchip/nps_enet.c | 7 +--
+ drivers/net/ethernet/freescale/fec_main.c | 7 +--
+ drivers/net/ethernet/freescale/fec_mpc52xx.c | 7 +--
+ drivers/net/ethernet/freescale/fman/mac.c | 9 ++--
+ .../net/ethernet/freescale/fs_enet/fs_enet-main.c | 5 +-
+ drivers/net/ethernet/freescale/gianfar.c | 8 +--
+ drivers/net/ethernet/freescale/ucc_geth.c | 5 +-
+ drivers/net/ethernet/hisilicon/hisi_femac.c | 7 +--
+ drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 7 +--
+ drivers/net/ethernet/lantiq_xrx200.c | 7 +--
+ drivers/net/ethernet/marvell/mv643xx_eth.c | 5 +-
+ drivers/net/ethernet/marvell/mvneta.c | 6 +--
+ .../net/ethernet/marvell/prestera/prestera_main.c | 11 ++--
+ drivers/net/ethernet/marvell/pxa168_eth.c | 9 +---
+ drivers/net/ethernet/marvell/sky2.c | 8 ++-
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c | 11 ++--
+ drivers/net/ethernet/micrel/ks8851_common.c | 7 ++-
+ drivers/net/ethernet/microchip/lan743x_main.c | 5 +-
+ drivers/net/ethernet/nxp/lpc_eth.c | 4 +-
+ drivers/net/ethernet/qualcomm/qca_spi.c | 10 ++--
+ drivers/net/ethernet/qualcomm/qca_uart.c | 9 +---
+ drivers/net/ethernet/renesas/ravb_main.c | 12 +++--
+ drivers/net/ethernet/renesas/sh_eth.c | 5 +-
+ .../net/ethernet/samsung/sxgbe/sxgbe_platform.c | 13 ++---
+ drivers/net/ethernet/socionext/sni_ave.c | 10 ++--
+ .../net/ethernet/stmicro/stmmac/dwmac-anarion.c | 2 +-
+ .../ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-generic.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c | 2 +-
+ .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/dwmac-visconti.c | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
+ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
+ .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 14 ++---
+ .../net/ethernet/stmicro/stmmac/stmmac_platform.h | 2 +-
+ drivers/net/ethernet/ti/am65-cpsw-nuss.c | 19 ++++---
+ drivers/net/ethernet/ti/cpsw.c | 7 +--
+ drivers/net/ethernet/ti/cpsw_new.c | 7 +--
+ drivers/net/ethernet/ti/davinci_emac.c | 8 +--
+ drivers/net/ethernet/ti/netcp_core.c | 7 +--
+ drivers/net/ethernet/wiznet/w5100-spi.c | 8 ++-
+ drivers/net/ethernet/wiznet/w5100.c | 2 +-
+ drivers/net/ethernet/xilinx/ll_temac_main.c | 8 +--
+ drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 15 +++---
+ drivers/net/ethernet/xilinx/xilinx_emaclite.c | 8 +--
+ drivers/net/wireless/ath/ath9k/init.c | 5 +-
+ drivers/net/wireless/mediatek/mt76/eeprom.c | 9 +---
+ drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 6 +--
+ drivers/of/of_net.c | 60 ++++++++++------------
+ drivers/staging/octeon/ethernet.c | 10 ++--
+ drivers/staging/wfx/main.c | 7 ++-
+ include/linux/of_net.h | 6 +--
+ include/net/dsa.h | 2 +-
+ net/dsa/dsa2.c | 2 +-
+ net/dsa/slave.c | 2 +-
+ net/ethernet/eth.c | 11 ++--
+ 85 files changed, 218 insertions(+), 364 deletions(-)
+
+diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c
+index 665b54c5c8ae5..6d895738222ad 100644
+--- a/eeprom.c
++++ b/eeprom.c
+@@ -91,15 +91,9 @@ void
+ {
+ struct mt76_dev *dev = phy->dev;
+
+-#ifdef CONFIG_OF
+ struct device_node *np = dev->dev->of_node;
+- const u8 *mac = NULL;
+
+- if (np)
+- mac = of_get_mac_address(np);
+- if (!IS_ERR_OR_NULL(mac))
+- ether_addr_copy(phy->macaddr, mac);
+-#endif
++ of_get_mac_address(np, phy->macaddr);
+
+ if (!is_valid_ether_addr(phy->macaddr)) {
+ eth_random_addr(phy->macaddr);
+--
+cgit 1.2.3-1.el7
+
--
2.25.1

View File

@@ -0,0 +1,215 @@
From b912dcd063381438ad70f4a3326ff0ac1be7c3ea Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@nbd.name>
Date: Tue, 26 Oct 2021 20:41:22 +0200
Subject: [PATCH] bpf-headers: add a package with kernel headers for ebpf
In order to genererate suitable kernel headers, a 5.10 kernel tree is
prepared with a default config for mips. The arch is forced to mips in
order to avoid issues with inline asm on various architectures in a way
that doesn't involve relying on the host toolchain/headers.
It also has the advantage of supporting both endian types
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
include/bpf.mk | 60 +++++++++++
package/kernel/bpf-headers/Makefile | 99 +++++++++++++++++++
.../src/include/generated/bounds.h | 14 +++
3 files changed, 173 insertions(+)
create mode 100644 include/bpf.mk
create mode 100644 package/kernel/bpf-headers/Makefile
create mode 100644 package/kernel/bpf-headers/src/include/generated/bounds.h
diff --git a/include/bpf.mk b/include/bpf.mk
new file mode 100644
index 0000000000..4e227a11d0
--- /dev/null
+++ b/include/bpf.mk
@@ -0,0 +1,60 @@
+ifeq ($(CONFIG_BUILD_LLVM_BPF),)
+export PATH:=/usr/local/opt/llvm/bin:$(PATH)
+CLANG:=$(firstword $(shell PATH='$(PATH)' which clang clang-13 clang-12 clang-11 clang-10 clang-9))
+LLVM_VER:=$(subst clang,,$(notdir $(CLANG)))
+else
+CLANG:=$(STAGING_DIR_HOST)/bin/clang
+LLVM_VER:=
+endif
+
+LLVM_PATH:=$(dir $(CLANG))
+LLVM_LLC:=$(LLVM_PATH)/llc$(LLVM_VER)
+LLVM_DIS:=$(LLVM_PATH)/llvm-dis$(LLVM_VER)
+LLVM_OPT:=$(LLVM_PATH)/opt$(LLVM_VER)
+LLVM_STRIP:=$(LLVM_PATH)/llvm-strip$(LLVM_VER)
+
+BPF_KARCH:=mips
+BPF_ARCH:=mips$(if $(CONFIG_BIG_ENDIAN),,el)
+
+BPF_HEADERS_DIR:=$(STAGING_DIR)/bpf-headers
+
+BPF_KERNEL_INCLUDE := \
+ -nostdinc -isystem $(TOOLCHAIN_DIR)/include \
+ -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include \
+ -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic \
+ -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated \
+ -I$(BPF_HEADERS_DIR)/include \
+ -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/uapi \
+ -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated/uapi \
+ -I$(BPF_HEADERS_DIR)/include/uapi \
+ -I$(BPF_HEADERS_DIR)/include/generated/uapi \
+ -I$(BPF_HEADERS_DIR)/tools/lib \
+ -I$(BPF_HEADERS_DIR)/tools/testing/selftests \
+ -I$(BPF_HEADERS_DIR)/samples/bpf \
+ -include linux/kconfig.h -include asm_goto_workaround.h
+
+BPF_CFLAGS := \
+ $(BPF_KERNEL_INCLUDE) -I$(PKG_BUILD_DIR) \
+ -D__KERNEL__ -D__BPF_TRACING__ \
+ -D__TARGET_ARCH_${BPF_KARCH} \
+ -m$(if $(CONFIG_BIG_ENDIAN),big,little)-endian \
+ -fno-stack-protector -Wall \
+ -Wno-unused-value -Wno-pointer-sign \
+ -Wno-compare-distinct-pointer-types \
+ -Wno-gnu-variable-sized-type-not-at-end \
+ -Wno-address-of-packed-member -Wno-tautological-compare \
+ -Wno-unknown-warning-option \
+ -fno-asynchronous-unwind-tables \
+ -Wno-uninitialized -Wno-unused-variable \
+ -Wno-unused-label \
+ -O2 -emit-llvm -Xclang -disable-llvm-passes
+
+define CompileBPF
+ $(CLANG) -g -target $(BPF_ARCH)-linux-gnu $(BPF_CFLAGS) $(2) \
+ -c $(1) -o $(patsubst %.c,%.bc,$(1))
+ $(LLVM_OPT) -O2 -mtriple=bpf-pc-linux < $(patsubst %.c,%.bc,$(1)) > $(patsubst %.c,%.opt,$(1))
+ $(LLVM_DIS) < $(patsubst %.c,%.opt,$(1)) > $(patsubst %.c,%.S,$(1))
+ $(LLVM_LLC) -march=bpf -filetype=obj -o $(patsubst %.c,%.o,$(1)) < $(patsubst %.c,%.S,$(1))
+ $(LLVM_STRIP) --strip-debug $(patsubst %.c,%.o,$(1))
+endef
+
diff --git a/package/kernel/bpf-headers/Makefile b/package/kernel/bpf-headers/Makefile
new file mode 100644
index 0000000000..e316feea55
--- /dev/null
+++ b/package/kernel/bpf-headers/Makefile
@@ -0,0 +1,99 @@
+#
+# Copyright (C) 2006-2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+override QUILT:=
+override HOST_QUILT:=
+
+include $(INCLUDE_DIR)/kernel.mk
+
+
+PKG_NAME:=linux
+PKG_PATCHVER:=5.10
+PKG_VERSION:=$(PKG_PATCHVER)$(strip $(LINUX_VERSION-$(PKG_PATCHVER)))
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=$(LINUX_SITE)
+PKG_HASH:=$(LINUX_KERNEL_HASH-$(strip $(PKG_VERSION)))
+PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/bpf-headers/$(PKG_NAME)-$(PKG_VERSION)
+
+GENERIC_BACKPORT_DIR := $(GENERIC_PLATFORM_DIR)/backport$(if $(wildcard $(GENERIC_PLATFORM_DIR)/backport-$(PKG_PATCHVER)),-$(PKG_PATCHVER))
+GENERIC_PATCH_DIR := $(GENERIC_PLATFORM_DIR)/pending$(if $(wildcard $(GENERIC_PLATFORM_DIR)/pending-$(PKG_PATCHVER)),-$(PKG_PATCHVER))
+GENERIC_HACK_DIR := $(GENERIC_PLATFORM_DIR)/hack$(if $(wildcard $(GENERIC_PLATFORM_DIR)/hack-$(PKG_PATCHVER)),-$(PKG_PATCHVER))
+GENERIC_FILES_DIR := $(foreach dir,$(wildcard $(GENERIC_PLATFORM_DIR)/files $(GENERIC_PLATFORM_DIR)/files-$(PKG_PATCHVER)),"$(dir)")
+PATCH_DIR := $(CURDIR)/patches
+FILES_DIR :=
+
+REAL_LINUX_DIR := $(LINUX_DIR)
+LINUX_DIR := $(PKG_BUILD_DIR)
+
+include $(INCLUDE_DIR)/bpf.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bpf-headers
+ SECTION:=kernel
+ CATEGORY:=Kernel
+ TITLE:=eBPF kernel headers
+ BUILDONLY:=1
+ HIDDEN:=1
+endef
+
+export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include
+
+KERNEL_MAKE := \
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ ARCH=$(BPF_KARCH) \
+ CROSS_COMPILE=$(BPF_ARCH)-linux- \
+ LLVM=1 CC="$(CLANG)" LD="$(TARGET_CROSS)ld" \
+ HOSTCC="$(HOSTCC)" \
+ HOSTCXX="$(HOSTCXX)" \
+ HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib" \
+ KBUILD_HOSTLDLIBS="-L$(STAGING_DIR_HOST)/lib" \
+ CONFIG_SHELL="$(BASH)" \
+ INSTALL_HDR_PATH="$(PKG_BUILD_DIR)/user_headers"
+
+define Build/Patch
+ $(Kernel/Patch/Default)
+endef
+
+BPF_DOC = $(wildcard $(patsubst %,$(LINUX_DIR)/scripts/%.py,bpf_doc bpf_helpers_doc))
+
+define Build/Configure
+ grep -vE 'CONFIG_(CPU_.*ENDIAN|HZ)' $(PKG_BUILD_DIR)/arch/mips/configs/generic_defconfig > $(PKG_BUILD_DIR)/.config
+ echo 'CONFIG_CPU_$(if $(CONFIG_BIG_ENDIAN),BIG,LITTLE)_ENDIAN=y' >> $(PKG_BUILD_DIR)/.config
+ grep CONFIG_HZ $(REAL_LINUX_DIR)/.config >> $(PKG_BUILD_DIR)/.config
+ yes '' | $(KERNEL_MAKE) oldconfig
+ grep 'CONFIG_HZ=' $(REAL_LINUX_DIR)/.config | \
+ cut -d= -f2 | \
+ bc -q $(LINUX_DIR)/kernel/time/timeconst.bc \
+ > $(LINUX_DIR)/include/generated/timeconst.h
+ $(BPF_DOC) --header \
+ --file $(LINUX_DIR)/tools/include/uapi/linux/bpf.h \
+ > $(PKG_BUILD_DIR)/tools/lib/bpf/bpf_helper_defs.h
+endef
+
+define Build/Compile
+ $(KERNEL_MAKE) archprepare headers_install
+endef
+
+define Build/InstallDev
+ mkdir -p $(1)/bpf-headers/arch $(1)/bpf-headers/tools
+ $(CP) \
+ $(PKG_BUILD_DIR)/arch/$(BPF_KARCH) \
+ $(1)/bpf-headers/arch/
+ $(CP) \
+ $(PKG_BUILD_DIR)/tools/lib \
+ $(PKG_BUILD_DIR)/tools/testing \
+ $(1)/bpf-headers/tools/
+ $(CP) \
+ $(PKG_BUILD_DIR)/include \
+ $(PKG_BUILD_DIR)/samples \
+ $(PKG_BUILD_DIR)/scripts \
+ $(PKG_BUILD_DIR)/user_headers \
+ $(1)/bpf-headers
+endef
+
+$(eval $(call BuildPackage,bpf-headers))
diff --git a/package/kernel/bpf-headers/src/include/generated/bounds.h b/package/kernel/bpf-headers/src/include/generated/bounds.h
new file mode 100644
index 0000000000..82ff01043c
--- /dev/null
+++ b/package/kernel/bpf-headers/src/include/generated/bounds.h
@@ -0,0 +1,14 @@
+#ifndef __LINUX_BOUNDS_H__
+#define __LINUX_BOUNDS_H__
+/*
+ * DO NOT MODIFY.
+ *
+ * This file was generated by Kbuild
+ */
+
+#define NR_PAGEFLAGS 23 /* __NR_PAGEFLAGS */
+#define MAX_NR_ZONES 4 /* __MAX_NR_ZONES */
+#define NR_CPUS_BITS 1 /* ilog2(CONFIG_NR_CPUS) */
+#define SPINLOCK_SIZE 64 /* sizeof(spinlock_t) */
+
+#endif
--
2.25.1

View File

@@ -0,0 +1,47 @@
From 4b2e6bb352b400e244646a7bc59bc5ca3ca6f5df Mon Sep 17 00:00:00 2001
From: Roman Yeryomin <roman@advem.lv>
Date: Fri, 3 Sep 2021 17:31:11 +0300
Subject: [PATCH 32/32] iproute2: m_xt.so depends on dynsyms.list
When doing parallel build on a fast machine with bottleneck in i/o,
m_xt.so may start linking faster than dynsyms.list gets populated,
resulting in error:
ld:dynsyms.list:0: syntax error in dynamic list
Fix this by adding dynsyms.list as make dependency to m_xt.so
Described also here:
https://bugs.openwrt.org/index.php?do=details&task_id=3353
Change from v1:
- add dynsysms.list dependancy only when shared libs are enabled
Signed-off-by: Roman Yeryomin <roman@advem.lv>
Fixes: FS#3353
---
.../utils/iproute2/patches/175-reduce-dynamic-syms.patch | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch b/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch
index da961a183b..c3892e5a0e 100644
--- a/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch
+++ b/package/network/utils/iproute2/patches/175-reduce-dynamic-syms.patch
@@ -26,13 +26,14 @@
q_atm.so: q_atm.c
$(QUIET_CC)$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -shared -fpic -o q_atm.so q_atm.c -latm
-@@ -205,4 +206,15 @@ static-syms.h: $(wildcard *.c)
+@@ -205,4 +206,16 @@ static-syms.h: $(wildcard *.c)
sed -n '/'$$s'[^ ]* =/{s:.* \([^ ]*'$$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $$files ; \
done > $@
+else
+
+tc: dynsyms.list
++m_xt.so: dynsyms.list
+dynsyms.list: $(wildcard *.c)
+ files="$(filter-out $(patsubst %.so,%.c,$(TCSO)), $^)" ; \
+ echo "{" > $@ ; \
--
2.25.1

View File

@@ -3,9 +3,9 @@ FROM ubuntu:20.04
RUN apt-get update \
&& DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata \
&& apt-get install -y \
time git-core build-essential gcc-multilib \
time git-core build-essential gcc-multilib clang \
libncurses5-dev zlib1g-dev gawk flex gettext wget unzip python \
python3 python3-pip python3-yaml libssl-dev rsync \
python3 python3-pip python3-yaml libssl-dev rsync llvm llvm-12 \
&& apt-get clean
RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"

View File

@@ -24,8 +24,7 @@ define Package/fbwifi
SECTION:=net
CATEGORY:=Network
DEPENDS:=+iptables +luasec +luasocket \
+luci-base +libuci-lua +luaposix \
+luci-mod-network +luci-mod-status +luci-theme-bootstrap \
+libuci-lua +luaposix \
+lua-cjson +uhttpd
TITLE:=Facebook Wi-Fi
PKGARCH:=all
@@ -35,6 +34,22 @@ define Package/fbwifi/description
Facebook Wi-Fi, an AP authorisation solution
endef
define Package/luci-app-fbwifi
SUBMENU:=3. Applications
SECTION:=luci
CATEGORY:=LuCI
TITLE:=LuCI support for Facebook Wi-Fi
DEPENDS:= \
+fbwifi \
+luci-base +luci-mod-network +luci-mod-status +luci-theme-bootstrap
endef
define Package/luci-app-fbwifi/description
LuCI support for Facebook Wi-Fi
endef
define Package/fbwifi/conffiles
/etc/config/fbwifi
endef
@@ -50,7 +65,13 @@ endef
define Package/fbwifi/install
$(INSTALL_DIR) $(1)
$(CP) ./files/* $(1)/
$(CP) ./files/fbwifi/* $(1)/
endef
define Package/luci-app-fbwifi/install
$(INSTALL_DIR) $(1)
$(CP) ./files/luci-app-fbwifi/* $(1)
endef
$(eval $(call BuildPackage,fbwifi))
$(eval $(call BuildPackage,luci-app-fbwifi))

View File

@@ -6,50 +6,17 @@ Case studies for OEM customers are available at the official page of [Facebook W
For OEM engineers, start by reading the init script in [files/etc/init.d/fbwifi](https://github.com/facebookincubator/fbc_owrt_feed/blob/master/fbwifi/files/etc/init.d/fbwifi)
To enable Facebook Wi-Fi, configure the gateway_token in `/etc/config/fbwifi`, and run `fbwifi enable`.
To disable Facebook Wi-Fi, run `fbwifi disable`.
## Contents
The 'files' subdirectory contains all the configuration, script and code
that implements the Facebook Wi-Fi v2.0 standard for OpenWrt.
The 'files' subdirectory contains two subdirectories, one for the fbwifi
package that implements the Facebook Wi-Fi v2.0 standard for OpenWrt, and
another one containing a LuCI application to configure Facebook Wi-Fi.
The folder structure follows *nix conventions :
The folder structures follow *nix conventions:
- 'etc' is the boot time scripts and configuration
- 'usr' contains procedural scripts, lua common code module and GUI prototype for luci
- 'www' contains the HTTP endpoints as CGI handlers
```
files/
├── etc
│   ├── config
│   │   └── fbwifi
│   ├── hotplug.d
│   │   └── iface
│   │   └── 50-fbwifi
│   ├── init.d
│   │   └── fbwifi
├── usr
│   ├── lib
│   │   └── lua
│   │   ├── fbwifi.lua
│   │   └── luci
│   │   ├── controller
│   │   │   └── fbwifi.lua
│   │   └── view
│   │   └── fbwifi.htm
│   ├── sbin
│   │ ├── fbwifi
│   │ ├── fbwifi_debug_dump
│   │ ├── fbwifi_gateway_info_update
│   │ ├── fbwifi_get_config
│   │ └── fbwifi_validate_token_db
│ └── share
│ └── fbwifi
│ ├── firewall.include
│ └── uhttpd.json
└── www
└── cgi-bin
└── fbwifi
└── v2.0
├── auth
├── capport
└── info
```

View File

@@ -1,3 +1,6 @@
-- SPDX-License-Identifier: GPL-2.0-only
-- Copyright (c) Facebook, Inc. and its affiliates.
--
-- FBWIFI Lua library
-- function table
local fbwifi = {}
@@ -8,9 +11,7 @@ local log = require("posix.syslog")
local uci = require("uci")
function fbwifi.gateway_token()
state = uci.cursor(nil, "/var/state")
token = state:get("fbwifi", "main", "gateway_token")
token = uci.get("fbwifi.main.gateway_token")
if token and string.len(token) > 0 then
return token
else
@@ -44,7 +45,7 @@ end
local mac_to_purge=''
function remove_client_by_mac(client)
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
for key, value in pairs(client) do
if
@@ -62,7 +63,7 @@ function fbwifi.instate_client_rule( token, client_mac )
log.syslog(log.LOG_INFO, "[fbwifi] Validating client "..client_mac)
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
state_name = "token_" .. token
RULE_COND="iptables -w -L FBWIFI_CLIENT_TO_INTERNET -t mangle | grep -i -q \"%s\""
@@ -90,8 +91,9 @@ function fbwifi.instate_client_rule( token, client_mac )
log.syslog(log.LOG_WARNING, string.format( "[fbwifi] Failed to update iptables (%s)", res ) )
end
log.syslog(log.LOG_INFO, "[fbwifi] "..RULE)
state:save('fbwifi')
state:commit('fbwifi')
end
function fbwifi.revoke_client_rule( token )
@@ -103,7 +105,7 @@ function fbwifi.revoke_client_rule( token )
log.syslog(log.LOG_INFO, string.format( "[fbwifi] Invalidating token (%s)", token) )
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
state_name = "token_" .. token
client_mac = state:get("fbwifi", state_name, "mac")
@@ -124,6 +126,7 @@ function fbwifi.revoke_client_rule( token )
state:delete("fbwifi", state_name)
state:save('fbwifi')
state:commit('fbwifi')
else
log.syslog(log.LOG_WARNING, string.format( "[fbwifi] Client MAC not found in DB (%s)", state_name ) )
end

View File

@@ -26,6 +26,7 @@ enable)
uci set uhttpd.fbwifi_redirect=uhttpd
uci set uhttpd.fbwifi_redirect.enabled=1
uci set uhttpd.fbwifi_redirect.cert='/tmp/fbwifi/https_server_cert'
uci set uhttpd.fbwifi_redirect.home='/dev/null'
uci set uhttpd.fbwifi_redirect.json_script='/tmp/fbwifi/uhttpd-redirect.json'
uci set uhttpd.fbwifi_redirect.key='/tmp/fbwifi/https_server_key'
uci set uhttpd.fbwifi_redirect.listen_http='0.0.0.0:2060'
@@ -39,7 +40,7 @@ enable)
reload)
/usr/sbin/fbwifi_get_config
login_url=$(uci -p /var/state get fbwifi.main.captive_portal_url)
login_url=$(uci -c /var/state get fbwifi.main.captive_portal_url)
[ -z "$login_url" ] && {
logger -t fbwifi "captive_portal_url not available yet"
exit 1

View File

@@ -1,5 +1,5 @@
echo -e "Runtime configuration and token DB\n"
uci -p /var/state export fbwifi
uci -c /var/state export fbwifi
echo -e "\nDynamic firewall flow rules\n"
iptables -t mangle -L FBWIFI_CLIENT_TO_INTERNET

View File

@@ -8,7 +8,7 @@ require("uci")
fbwifi = require("fbwifi")
GATEWAY_TOKEN = fbwifi.gateway_token()
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
payload="name="..socket.dns.gethostname()
@@ -19,6 +19,7 @@ function queue_ssid_update(iface)
for line in file:lines() do
payload=payload.."&bssid[]="..line
end
file:close()
payload=payload.."ssid[]="..iface["ssid"]
else
log.syslog(log.LOG_WARNING, "[fbwifi] Failed to find BSSID for interface br-"..iface["network"])

View File

@@ -10,7 +10,10 @@ GATEWAY_TOKEN = fbwifi.gateway_token()
http_port = uci.get("fbwifi.main.http_port")
https_port = uci.get("fbwifi.main.https_port")
state = uci.cursor(nil, "/var/state")
statefile = assert(io.open("/var/state/fbwifi", "a"), "could not create state file")
statefile:close()
state = uci.cursor("/var/state", "/tmp/fbwifi")
URL="https://api.fbwifi.com/v2.0/gateway"
body, code, headers = http.request(URL.."?access_token="..GATEWAY_TOKEN.."&fields=config,config_version")
@@ -100,7 +103,9 @@ result = os.execute("iptables -t mangle -F FBWIFI_TRAFFIC_ALLOWLIST ")
table.foreach(obj['config']['traffic_allowlist'], process_traffic_rule)
table.foreach(obj['config']['cross_origin_allowlist'], process_cross_origin_rule)
table.foreach(obj['config']['urls'], process_url)
state:set("fbwifi", "main", "cross_origin_allow_rules", cross_origin_list)
state:set("fbwifi", "main", "cross_origin_allow_rules", cross_origin_list)
state:set("fbwifi", "main", "config_version", obj['config_version'])
state:save('fbwifi')
state:commit('fbwifi')

View File

@@ -6,7 +6,7 @@ log = require("posix.syslog")
fbwifi = require("fbwifi")
require("uci")
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
GATEWAY_TOKEN = fbwifi.gateway_token()
request = {
@@ -36,7 +36,7 @@ URL="https://api.fbwifi.com/v2.0/tokens"
BODY=string.format(
"tokens=%s&traffic_type=%s&config_version=%s",
json.encode(request.tokens),
"'total'",
"total",
state:get("fbwifi", "main", "config_version")
)

View File

@@ -0,0 +1,75 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
# Copyright (c) Facebook, Inc. and its affiliates.
IPT4="/usr/sbin/iptables"
set -- --wait 1 --wait-interval 100
fbwifi_http_port="$(uci get fbwifi.main.http_port)"
[ -n "$fbwifi_http_port" ] || {
logger -t fbwifi "required option http_port not set"
exit 1
}
fbwifi_https_port="$(uci get fbwifi.main.https_port)"
[ -n "$fbwifi_https_port" ] || {
logger -t fbwifi "required option https_port not set"
exit 1
}
fbwifi_zone="$(uci get fbwifi.main.zone)"
[ -n "$fbwifi_zone" ] || {
logger -t fbwifi "required option zone not set"
exit 1
}
fbwifi_ifaces="$(fw3 -q zone "$fbwifi_zone")"
## Create custom chains
"$IPT4" "$@" -t filter -N FBWIFI_FORWARD 2>/dev/null
"$IPT4" "$@" -t filter -N FBWIFI_INPUT 2>/dev/null
"$IPT4" "$@" -t mangle -N FBWIFI_CLIENT_TO_INTERNET 2>/dev/null
"$IPT4" "$@" -t mangle -N FBWIFI_PREROUTING 2>/dev/null
"$IPT4" "$@" -t mangle -N FBWIFI_TRAFFIC_ALLOWLIST 2>/dev/null
"$IPT4" "$@" -t nat -N FBWIFI_CLIENT_TO_INTERNET 2>/dev/null
"$IPT4" "$@" -t nat -N FBWIFI_PREROUTING 2>/dev/null
"$IPT4" "$@" -t nat -N FBWIFI_HOST_REDIRLIST 2>/dev/null
## Flush custom chains
"$IPT4" "$@" -t filter -F FBWIFI_FORWARD
"$IPT4" "$@" -t filter -F FBWIFI_INPUT
"$IPT4" "$@" -t mangle -F FBWIFI_CLIENT_TO_INTERNET
"$IPT4" "$@" -t mangle -F FBWIFI_PREROUTING
"$IPT4" "$@" -t mangle -F FBWIFI_TRAFFIC_ALLOWLIST
"$IPT4" "$@" -t nat -F FBWIFI_CLIENT_TO_INTERNET
"$IPT4" "$@" -t nat -F FBWIFI_PREROUTING
"$IPT4" "$@" -t nat -F FBWIFI_HOST_REDIRLIST
## Populate custom chains
"$IPT4" "$@" -t filter -A FBWIFI_FORWARD -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
"$IPT4" "$@" -t filter -A FBWIFI_FORWARD -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
"$IPT4" "$@" -t filter -A FBWIFI_FORWARD -j REJECT
"$IPT4" "$@" -t filter -A FBWIFI_INPUT -p tcp --dport "$fbwifi_http_port" -m conntrack --ctstate NEW -j ACCEPT
"$IPT4" "$@" -t filter -A FBWIFI_INPUT -p tcp --dport "$fbwifi_https_port" -m conntrack --ctstate NEW -j ACCEPT
"$IPT4" "$@" -t filter -A FBWIFI_INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
"$IPT4" "$@" -t mangle -A FBWIFI_PREROUTING -j FBWIFI_CLIENT_TO_INTERNET
"$IPT4" "$@" -t mangle -A FBWIFI_PREROUTING -j FBWIFI_TRAFFIC_ALLOWLIST
"$IPT4" "$@" -t nat -A FBWIFI_PREROUTING -j FBWIFI_CLIENT_TO_INTERNET
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 80 -m conntrack --ctstate NEW -j FBWIFI_HOST_REDIRLIST
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 443 -m conntrack --ctstate NEW -j FBWIFI_HOST_REDIRLIST
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p udp --dport 443 -m conntrack --ctstate NEW -j FBWIFI_HOST_REDIRLIST
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 80 -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 443 -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p udp --dport 443 -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
"$IPT4" "$@" -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 80 -m conntrack --ctstate NEW -j REDIRECT --to-ports "$fbwifi_http_port"
## Hook custom chains in firewall3 chains
"$IPT4" "$@" -t filter -I "zone_${fbwifi_zone}_input" 2 -j FBWIFI_INPUT
"$IPT4" "$@" -t filter -I "zone_${fbwifi_zone}_forward" 2 -j FBWIFI_FORWARD
"$IPT4" "$@" -t nat -I "zone_${fbwifi_zone}_prerouting" 2 -j FBWIFI_PREROUTING
# There are no firewall3 zone chains in the mangle table so we need to do this for all interfaces in the zone
for iface in $fbwifi_ifaces; do
"$IPT4" "$@" -t mangle -I PREROUTING -i "$iface" -j FBWIFI_PREROUTING
done

View File

@@ -3,7 +3,7 @@ require("uci")
log = require("posix.syslog")
fbwifi = require("fbwifi")
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
function process_cors()
origin = os.getenv("HTTP_ORIGIN")
log.syslog(log.LOG_INFO, string.format("[fbwifi] [auth] process_cors origin %s", origin or 'not found') )
@@ -25,7 +25,7 @@ end
method = os.getenv("REQUEST_METHOD")
if method == 'GET' then
log.syslog(log.LOG_INFO, "[fbwifi] [auth] GET handler")
print("Status: 302")
print("Status: 302 Found")
print("Location: "..state:get("fbwifi", "main", "landing_page_url"))
process_cors()
print ('\n')
@@ -35,7 +35,7 @@ elseif method == 'POST' then
log.syslog(log.LOG_INFO, "[fbwifi] [auth] POST handler")
process_cors()
print("Status: 200")
print("Status: 200 OK")
form_data=io.read()
while form_data do
@@ -43,8 +43,9 @@ elseif method == 'POST' then
if string.len(token or '') > 14 then
client = os.getenv("REMOTE_ADDR")
f = io.popen("awk '/"..client.."/ { printf(\"%s\", $4) }' /proc/net/arp", 'r')
f = io.popen("awk '/"..client..".*0x2/ { printf(\"%s\", $4) }' /proc/net/arp", 'r')
client_mac = assert(f:read('*a'))
f:close()
if fbwifi.validate_token(token) then
log.syslog(log.LOG_INFO, string.format( "[fbwifi] [auth] POST handler : Validating Token (%s) for MAC (%s)", token or 'nil', client_mac or 'nil') )

View File

@@ -2,7 +2,7 @@
json = require("cjson")
require("uci")
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
client_mac = ""
token = ""
@@ -22,8 +22,9 @@ function map_remote_mac_to_token(client)
end
function hasValidToken(client_ip)
f = io.popen("awk '/"..client_ip.."/ { printf(\"%s\", $4) }' /proc/net/arp", 'r')
f = io.popen("awk '/"..client_ip..".*0x2/ { printf(\"%s\", $4) }' /proc/net/arp", 'r')
client_mac = assert(f:read('*a'))
f:close()
state:foreach("fbwifi", "client", map_remote_mac_to_token)
return 0 < string.len(token)

View File

@@ -1,10 +1,8 @@
#!/usr/bin/lua
require "luci.cacheloader"
require "luci.sgi.cgi"
json = require("cjson")
fbwifi = require("fbwifi")
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
GATEWAY_TOKEN = fbwifi.gateway_token()
response = { api_version = "2.0", token = json.null }
@@ -38,8 +36,9 @@ function map_remote_mac_to_token(client)
end
function getClientToken(client_ip)
f = io.popen("awk '/"..client_ip.."/ { printf(\"%s\", $4) }' /proc/net/arp", 'r')
f = io.popen("awk '/"..client_ip..".*0x2/ { printf(\"%s\", $4) }' /proc/net/arp", 'r')
client_mac = assert(f:read('*a'))
f:close()
state:foreach("fbwifi", "client", map_remote_mac_to_token)
end

View File

@@ -1,5 +1,5 @@
-- Copyright
-- Licensed to the public under the GNU General Public License v2.
-- SPDX-License-Identifier: GPL-2.0-only
-- Copyright (c) Facebook, Inc. and its affiliates.
module("luci.controller.fbwifi", package.seeall)

View File

@@ -8,7 +8,7 @@
<h1>Facebook Wi-Fi</h1>
<%
require("uci")
state = uci.cursor(nil, "/var/state")
state = uci.cursor("/var/state", "/tmp/fbwifi")
url = state:get("fbwifi", "main", "captive_portal_config_url")
%>
<a href="<% print(url) %>">Configure FB business page</a>

View File

@@ -1,67 +0,0 @@
#!/bin/sh
IPT4="/usr/sbin/iptables"
fbwifi_http_port="$(uci get fbwifi.main.http_port)"
[ -n "$fbwifi_http_port" ] || {
logger -t fbwifi "required option http_port not set"
exit 1
}
fbwifi_https_port="$(uci get fbwifi.main.https_port)"
[ -n "$fbwifi_https_port" ] || {
logger -t fbwifi "required option https_port not set"
exit 1
}
fbwifi_zone="$(uci get fbwifi.main.zone)"
[ -n "$fbwifi_zone" ] || {
logger -t fbwifi "required option zone not set"
exit 1
}
fbwifi_ifaces="$(fw3 -q zone "$fbwifi_zone")"
## Create custom chains
$IPT4 -t filter -N FBWIFI_FORWARD 2>/dev/null
$IPT4 -t filter -N FBWIFI_INPUT 2>/dev/null
$IPT4 -t mangle -N FBWIFI_CLIENT_TO_INTERNET 2>/dev/null
$IPT4 -t mangle -N FBWIFI_PREROUTING 2>/dev/null
$IPT4 -t mangle -N FBWIFI_TRAFFIC_ALLOWLIST 2>/dev/null
$IPT4 -t nat -N FBWIFI_CLIENT_TO_INTERNET 2>/dev/null
$IPT4 -t nat -N FBWIFI_PREROUTING 2>/dev/null
$IPT4 -t nat -N FBWIFI_HOST_REDIRLIST 2>/dev/null
## Flush custom chains
$IPT4 -t filter -F FBWIFI_FORWARD
$IPT4 -t filter -F FBWIFI_INPUT
$IPT4 -t mangle -F FBWIFI_CLIENT_TO_INTERNET
$IPT4 -t mangle -F FBWIFI_PREROUTING
$IPT4 -t mangle -F FBWIFI_TRAFFIC_ALLOWLIST
$IPT4 -t nat -F FBWIFI_CLIENT_TO_INTERNET
$IPT4 -t nat -F FBWIFI_PREROUTING
$IPT4 -t nat -F FBWIFI_HOST_REDIRLIST
## Populate custom chains
$IPT4 -t filter -A FBWIFI_FORWARD -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
$IPT4 -t filter -A FBWIFI_FORWARD -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
$IPT4 -t filter -A FBWIFI_FORWARD -j REJECT
$IPT4 -t filter -A FBWIFI_INPUT -p tcp --dport "$fbwifi_http_port" -m conntrack --ctstate NEW -j ACCEPT
$IPT4 -t filter -A FBWIFI_INPUT -p tcp --dport "$fbwifi_https_port" -m conntrack --ctstate NEW -j ACCEPT
$IPT4 -t mangle -A FBWIFI_PREROUTING -j FBWIFI_CLIENT_TO_INTERNET
$IPT4 -t mangle -A FBWIFI_PREROUTING -j FBWIFI_TRAFFIC_ALLOWLIST
$IPT4 -t nat -A FBWIFI_PREROUTING -j FBWIFI_CLIENT_TO_INTERNET
$IPT4 -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 80 -m conntrack --ctstate NEW -j FBWIFI_HOST_REDIRLIST
$IPT4 -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 443 -m conntrack --ctstate NEW -j FBWIFI_HOST_REDIRLIST
$IPT4 -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 80 -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
$IPT4 -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 443 -m conntrack --ctstate NEW -m mark --mark 0xfb -j ACCEPT
$IPT4 -t nat -A FBWIFI_CLIENT_TO_INTERNET -p tcp --dport 80 -m conntrack --ctstate NEW -j REDIRECT --to-ports "$fbwifi_http_port"
## Hook custom chains in firewall3 chains
$IPT4 -t filter -I "zone_${fbwifi_zone}_input" 2 -j FBWIFI_INPUT
$IPT4 -t filter -I "zone_${fbwifi_zone}_forward" 2 -j FBWIFI_FORWARD
$IPT4 -t nat -I "zone_${fbwifi_zone}_prerouting" 2 -j FBWIFI_PREROUTING
# There are no firewall3 zone chains in the mangle table so we need to do this for all interfaces in the zone
for iface in $fbwifi_ifaces; do
$IPT4 -t mangle -I PREROUTING -i "$iface" -j FBWIFI_PREROUTING
done

View File

@@ -0,0 +1,42 @@
#
# Copyright (C) 2016 LEDE
#
# 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:=sched-cake
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/dtaht/sch_cake.git
PKG_SOURCE_DATE:=2021-07-09
PKG_SOURCE_VERSION:=d9e1398cc9091e9e7c7a740361e4617b75c24427
#PKG_MIRROR_HASH:=5bf06a804824db36ae393fc174aeec7b12633176e05a765c0931b39df5bd34df
PKG_MAINTAINER:=Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
include $(INCLUDE_DIR)/package.mk
define KernelPackage/sched-cake
SUBMENU:=Network Support
TITLE:=Cake fq_codel/blue derived shaper
URL:=https://github.com/dtaht/sch_cake
FILES:=$(PKG_BUILD_DIR)/sch_cake.ko
AUTOLOAD:=$(call AutoLoad,75,sch_cake)
DEPENDS:=+kmod-ipt-conntrack
endef
include $(INCLUDE_DIR)/kernel-defaults.mk
define KernelPackage/sched-cake/description
Common Applications Kept Enhanced fq_codel/blue derived shaper
endef
define Build/Compile
$(KERNEL_MAKE) SUBDIRS="$(PKG_BUILD_DIR)" modules
endef
$(eval $(call KernelPackage,sched-cake))

View File

@@ -0,0 +1,20 @@
Index: sched-cake-2021-07-09-d9e1398c/cobalt_compat.h
===================================================================
--- sched-cake-2021-07-09-d9e1398c.orig/cobalt_compat.h
+++ sched-cake-2021-07-09-d9e1398c/cobalt_compat.h
@@ -95,15 +95,6 @@ static inline unsigned int __tcp_hdrlen(
}
#endif
-#if KERNEL_VERSION(4, 6, 0) > LINUX_VERSION_CODE
-static inline int skb_try_make_writable(struct sk_buff *skb,
- unsigned int write_len)
-{
- return skb_cloned(skb) && !skb_clone_writable(skb, write_len) &&
- pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
-}
-#endif
-
#if KERNEL_VERSION(4, 11, 0) > LINUX_VERSION_CODE
static inline int skb_mac_offset(const struct sk_buff *skb)
{

View File

@@ -6,7 +6,7 @@ PKG_SOURCE_PROTO:=git
PKG_BRANCH:=master
PKG_RELEASE:=2
PKG_SOURCE_URL:=https://source.codeaurora.org/quic/qsdk/oss/lklm/nss-clients/
PKG_VERSION:=9136ef60bf68ceed760781d3acbeddb05470e432
PKG_VERSION:=153998d70fdba508a59a28c13a606032cbf32686
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
@@ -18,23 +18,12 @@ MAKE_OPTS:=
include $(INCLUDE_DIR)/package.mk
# Keep default as ipq806x for branches that does not have subtarget framework
ifeq ($(CONFIG_TARGET_ipq),y)
subtarget:=$(SUBTARGET)
else
subtarget:=$(CONFIG_TARGET_BOARD)
endif
ifneq (, $(findstring $(subtarget), "ipq807x" "ipq807x_ipq807x" "ipq60xx" "ipq807x_ipq60xx"))
# DTLS Manager v2.0 for Hawkeye/Cypress
DTLSMGR_DIR:=v2.0
# IPsec Manager v2.0 for Hawkeye/Cypress
IPSECMGR_DIR:=v2.0
else
# DTLS Manager v1.0 for Akronite.
DTLSMGR_DIR:=v1.0
# IPsec Manager v1.0 for Akronite.
IPSECMGR_DIR:=v1.0
endif
define KernelPackage/qca-nss-drv-tun6rd
SECTION:=kernel
@@ -437,6 +426,20 @@ define Build/InstallDev/qca-nss-clients
$(CP) $(PKG_BUILD_DIR)/exports/* $(1)/usr/include/qca-nss-clients/
endef
define KernelPackage/qca-nss-drv-wifi-meshmgr
SECTION:=kernel
CATEGORY:=Kernel modules
SUBMENU:=Network Devices
DEPENDS:=+kmod-qca-nss-drv @!LINUX_3_18
TITLE:=NSS WiFi-Mesh Manager for QCA NSS driver
FILES:=$(PKG_BUILD_DIR)/wifi_meshmgr/qca-nss-wifi-meshmgr.ko
AUTOLOAD:=$(call AutoLoad,51,qca-nss-wifi-meshmgr)
endef
define KernelPackage/qca-nss-drv-wifi-meshmgr/Description
Kernel module for WiFi Mesh manager
endef
define Build/InstallDev
$(call Build/InstallDev/qca-nss-clients,$(1))
endef
@@ -585,6 +588,10 @@ ifneq ($(CONFIG_PACKAGE_kmod-qca-nss-drv-mirror),)
MAKE_OPTS+=mirror=y
endif
ifneq ($(CONFIG_PACKAGE_kmod-qca-nss-drv-wifi-meshmgr),)
MAKE_OPTS+=wifi-meshmgr=y
endif
define Build/Compile
$(MAKE) -C "$(LINUX_DIR)" $(strip $(MAKE_OPTS)) \
CROSS_COMPILE="$(TARGET_CROSS)" \
@@ -624,3 +631,4 @@ $(eval $(call KernelPackage,qca-nss-drv-vxlanmgr))
$(eval $(call KernelPackage,qca-nss-drv-match))
#$(eval $(call KernelPackage,qca-nss-drv-tlsmgr))
$(eval $(call KernelPackage,qca-nss-drv-mirror))
$(eval $(call KernelPackage,qca-nss-drv-wifi-meshmgr))

View File

@@ -30,7 +30,7 @@ NSS_DP_INCLUDE += -I$(obj)/hal/gmac_hal_ops/syn/gmac
endif
ccflags-y += $(NSS_DP_INCLUDE)
ccflags-y += -Werror
ccflags-y += -Wall -Werror
ifeq ($(SoC),$(filter $(SoC),ipq807x ipq807x_64 ipq60xx ipq60xx_64))
ccflags-y += -DNSS_DP_PPE_SUPPORT
@@ -43,7 +43,7 @@ endif
ifeq ($(SoC),$(filter $(SoC),ipq807x ipq807x_64))
qca-nss-dp-objs += hal/arch/ipq807x/nss_ipq807x.o
ccflags-y += -DNSS_DP_IPQ807X
ccflags-y += -DNSS_DP_IPQ807X -DNSS_DP_EDMA_TX_SMALL_PKT_WAR
endif
ifeq ($(SoC),$(filter $(SoC),ipq50xx ipq50xx_64))

View File

@@ -68,8 +68,13 @@ static void nss_dp_hal_tcsr_set(void)
* If TZ is not enabled, we can write to the register directly.
*/
if (qcom_scm_is_available()) {
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0))
err = qcom_scm_tcsr_reg_write((tcsr_base + TCSR_GMAC_AXI_CACHE_OVERRIDE_OFFSET),
TCSR_GMAC_AXI_CACHE_OVERRIDE_VALUE);
#else
err = qti_scm_tcsr_reg_write((tcsr_base + TCSR_GMAC_AXI_CACHE_OVERRIDE_OFFSET),
TCSR_GMAC_AXI_CACHE_OVERRIDE_VALUE);
#endif
if (err) {
pr_err("%s: SCM TCSR write error: %d\n", __func__, err);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2021, 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
@@ -67,6 +67,76 @@ void edma_reg_write(uint32_t reg_off, uint32_t val)
writel(val, edma_hw.reg_base + reg_off);
}
/*
* edma_disable_interrupts()
* Disable EDMA RX/TX interrupt masks.
*/
static void edma_disable_interrupts(void)
{
struct edma_rxdesc_ring *rxdesc_ring = NULL;
struct edma_rxfill_ring *rxfill_ring = NULL;
struct edma_txcmpl_ring *txcmpl_ring = NULL;
int i;
for (i = 0; i < edma_hw.rxdesc_rings; i++) {
rxdesc_ring = &edma_hw.rxdesc_ring[i];
edma_reg_write(EDMA_REG_RXDESC_INT_MASK(rxdesc_ring->id),
EDMA_MASK_INT_CLEAR);
}
for (i = 0; i < edma_hw.txcmpl_rings; i++) {
txcmpl_ring = &edma_hw.txcmpl_ring[i];
edma_reg_write(EDMA_REG_TX_INT_MASK(txcmpl_ring->id),
EDMA_MASK_INT_CLEAR);
}
for (i = 0; i < edma_hw.rxfill_rings; i++) {
rxfill_ring = &edma_hw.rxfill_ring[i];
edma_reg_write(EDMA_REG_RXFILL_INT_MASK(rxfill_ring->id),
EDMA_MASK_INT_CLEAR);
}
/*
* Clear MISC interrupt mask.
*/
edma_reg_write(EDMA_REG_MISC_INT_MASK, EDMA_MASK_INT_CLEAR);
}
/*
* edma_enable_interrupts()
* Enable RX/TX EDMA interrupt masks.
*/
static void edma_enable_interrupts(void)
{
struct edma_rxdesc_ring *rxdesc_ring = NULL;
struct edma_rxfill_ring *rxfill_ring = NULL;
struct edma_txcmpl_ring *txcmpl_ring = NULL;
int i;
for (i = 0; i < edma_hw.rxfill_rings; i++) {
rxfill_ring = &edma_hw.rxfill_ring[i];
edma_reg_write(EDMA_REG_RXFILL_INT_MASK(rxfill_ring->id),
edma_hw.rxfill_intr_mask);
}
for (i = 0; i < edma_hw.txcmpl_rings; i++) {
txcmpl_ring = &edma_hw.txcmpl_ring[i];
edma_reg_write(EDMA_REG_TX_INT_MASK(txcmpl_ring->id),
edma_hw.txcmpl_intr_mask);
}
for (i = 0; i < edma_hw.rxdesc_rings; i++) {
rxdesc_ring = &edma_hw.rxdesc_ring[i];
edma_reg_write(EDMA_REG_RXDESC_INT_MASK(rxdesc_ring->id),
edma_hw.rxdesc_intr_mask);
}
/*
* Enable MISC interrupt mask.
*/
edma_reg_write(EDMA_REG_MISC_INT_MASK, edma_hw.misc_intr_mask);
}
/*
* nss_dp_edma_if_open()
* Do slow path data plane open
@@ -85,6 +155,12 @@ static int edma_if_open(struct nss_dp_data_plane_ctx *dpc,
return NSS_DP_SUCCESS;
napi_enable(&edma_hw.napi);
/*
* Enable the interrupt masks.
*/
edma_enable_interrupts();
return NSS_DP_SUCCESS;
}
@@ -97,6 +173,11 @@ static int edma_if_close(struct nss_dp_data_plane_ctx *dpc)
if (--edma_hw.active != 0)
return NSS_DP_SUCCESS;
/*
* Disable the interrupt masks.
*/
edma_disable_interrupts();
/*
* Disable NAPI
*/
@@ -311,9 +392,6 @@ static int edma_if_deinit(struct nss_dp_data_plane_ctx *dpc)
*/
static int edma_irq_init(void)
{
struct edma_rxdesc_ring *rxdesc_ring = NULL;
struct edma_rxfill_ring *rxfill_ring = NULL;
struct edma_txcmpl_ring *txcmpl_ring = NULL;
int err;
uint32_t entry_num, i;
@@ -433,28 +511,6 @@ static int edma_irq_init(void)
goto misc_intr_req_fail;
}
/*
* Set interrupt mask
*/
for (i = 0; i < edma_hw.rxfill_rings; i++) {
rxfill_ring = &edma_hw.rxfill_ring[i];
edma_reg_write(EDMA_REG_RXFILL_INT_MASK(rxfill_ring->id),
edma_hw.rxfill_intr_mask);
}
for (i = 0; i < edma_hw.txcmpl_rings; i++) {
txcmpl_ring = &edma_hw.txcmpl_ring[i];
edma_reg_write(EDMA_REG_TX_INT_MASK(txcmpl_ring->id),
edma_hw.txcmpl_intr_mask);
}
for (i = 0; i < edma_hw.rxdesc_rings; i++) {
rxdesc_ring = &edma_hw.rxdesc_ring[i];
edma_reg_write(EDMA_REG_RXDESC_INT_MASK(rxdesc_ring->id),
edma_hw.rxdesc_intr_mask);
}
edma_reg_write(EDMA_REG_MISC_INT_MASK, edma_hw.misc_intr_mask);
return 0;
misc_intr_req_fail:

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2016, 2018-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2016, 2018-2021, 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
@@ -30,7 +30,7 @@
#define EDMA_NAPI_WORK 100
#define EDMA_START_GMACS NSS_DP_START_IFNUM
#define EDMA_MAX_GMACS NSS_DP_HAL_MAX_PORTS
#define EDMA_TX_PKT_MIN_SIZE 33
#define EDMA_TX_PKT_MIN_SIZE 33 /* IPQ807x EDMA needs a minimum packet size of 33 bytes */
#if defined(NSS_DP_IPQ60XX)
#define EDMA_MAX_TXCMPL_RINGS 24 /* Max TxCmpl rings */
#else

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2016-2018, 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2018, 2020-21, 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
@@ -524,7 +524,7 @@ enum edma_tx edma_ring_xmit(struct edma_hw *ehw,
{
struct nss_dp_dev *dp_dev = netdev_priv(netdev);
struct edma_txdesc_desc *txdesc = NULL;
uint16_t buf_len = skb_headlen(skb);
uint16_t buf_len;
uint16_t hw_next_to_use, hw_next_to_clean, chk_idx;
uint32_t data;
uint32_t store_index = 0;
@@ -560,6 +560,28 @@ enum edma_tx edma_ring_xmit(struct edma_hw *ehw,
return EDMA_TX_DESC;
}
#if defined(NSS_DP_EDMA_TX_SMALL_PKT_WAR)
/*
* IPQ807x EDMA hardware can't process the packet if the packet size is
* less than EDMA_TX_PKT_MIN_SIZE (33 Byte). So, if the packet size
* is indeed less than EDMA_TX_PKT_MIN_SIZE, perform padding
* (if possible), otherwise drop the packet.
* Using skb_padto() API for padding the packet. This API will drop
* the packet if the padding is not possible.
*/
if (unlikely(skb->len < EDMA_TX_PKT_MIN_SIZE)) {
if (skb_padto(skb, EDMA_TX_PKT_MIN_SIZE)) {
netdev_dbg(netdev, "padding couldn't happen, skb is freed.\n");
netdev->stats.tx_dropped++;
spin_unlock_bh(&txdesc_ring->tx_lock);
return EDMA_TX_OK;
}
skb->len = EDMA_TX_PKT_MIN_SIZE;
}
#endif
buf_len = skb_headlen(skb);
/*
* Deliver the ptp packet to phy driver for TX timestamping
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2021, 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
@@ -208,6 +208,10 @@ static int nss_dp_attr_set(struct net_device *dev,
struct switchdev_trans *trans)
{
struct nss_dp_dev *dp_priv = (struct nss_dp_dev *)netdev_priv(dev);
struct net_device *upper_dev;
struct vlan_dev_priv *vlan;
struct list_head *iter;
uint32_t stp_state = attr->u.stp_state;
if (switchdev_trans_ph_prepare(trans))
return 0;
@@ -218,7 +222,33 @@ static int nss_dp_attr_set(struct net_device *dev,
netdev_dbg(dev, "set brport_flags %lu\n", attr->u.brport_flags);
return 0;
case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
return nss_dp_stp_state_set(dp_priv, attr->u.stp_state);
/*
* The stp state is not changed to FAL_STP_DISABLED if
* the net_device (dev) has any vlan configured. Otherwise
* traffic on other vlan(s) will not work.
*
* Note: STP for VLANs is not supported by PPE.
*/
if ((stp_state == BR_STATE_DISABLED) ||
(stp_state == BR_STATE_BLOCKING)) {
rcu_read_lock();
netdev_for_each_upper_dev_rcu(dev, upper_dev, iter) {
if (!is_vlan_dev(upper_dev))
continue;
vlan = vlan_dev_priv(upper_dev);
if (vlan->real_dev == dev) {
rcu_read_unlock();
netdev_dbg(dev, "Do not update stp state to: %u since vlan id: %d is configured on netdevice: %s\n",
stp_state, vlan->vlan_id, vlan->real_dev->name);
return 0;
}
}
rcu_read_unlock();
}
return nss_dp_stp_state_set(dp_priv, stp_state);
default:
return -EOPNOTSUPP;
}

View File

@@ -46,7 +46,7 @@ ifneq (, $(findstring $(subtarget), "ipq807x" "ipq807x_64" "ipq60xx" "ipq60xx_64
endif
endef
EXTRA_CFLAGS+= -I$(STAGING_DIR)/usr/include/qca-nss-gmac -I$(STAGING_DIR)/usr/include/qca-nss-dp
EXTRA_CFLAGS+= -I$(STAGING_DIR)/usr/include/qca-nss-gmac -I$(STAGING_DIR)/usr/include/qca-nss-dp -I$(STAGING_DIR)/usr/include/qca-ssdk
# Keeping default as ipq806x for branches that does not have subtarget framework
subtarget:=$(SUBTARGET)

View File

@@ -8,8 +8,6 @@ obj-m += qca-nss-drv.o
# List the files that belong to the driver in alphabetical order.
#
qca-nss-drv-objs := \
nss_bridge.o \
nss_bridge_log.o \
nss_cmn.o \
nss_core.o \
nss_coredump.o \
@@ -29,16 +27,6 @@ qca-nss-drv-objs := \
nss_ipv4_stats.o \
nss_ipv4_strings.o \
nss_ipv4_log.o \
nss_ipv4_reasm.o \
nss_ipv4_reasm_stats.o \
nss_ipv4_reasm_strings.o \
nss_ipv6.o \
nss_ipv6_stats.o \
nss_ipv6_strings.o \
nss_ipv6_log.o \
nss_ipv6_reasm.o \
nss_ipv6_reasm_stats.o \
nss_ipv6_reasm_strings.o \
nss_log.o \
nss_lso_rx.o \
nss_lso_rx_stats.o \
@@ -70,21 +58,48 @@ qca-nss-drv-objs := \
nss_wifi_log.o \
nss_wifi_stats.o \
nss_wifi_vdev.o \
nss_wifi_if.o \
nss_wifi_if_stats.o \
nss_wifili.o \
nss_wifili_log.o \
nss_wifili_stats.o \
nss_wifili_strings.o \
nss_wifi_mac_db.o \
nss_wifi_ext_vdev.o \
nss_wifi_ext_vdev_stats.o \
nss_wifi_ext_vdev_log.o
nss_wifi_mac_db.o
# Base NSS data plane/HAL support
qca-nss-drv-objs += nss_data_plane/nss_data_plane_common.o
qca-nss-drv-objs += nss_hal/nss_hal.o
ifneq "$(NSS_DRV_BRIDGE_ENABLE)" "n"
ccflags-y += -DNSS_DRV_BRIDGE_ENABLE
qca-nss-drv-objs += \
nss_bridge.o \
nss_bridge_log.o
endif
ifneq "$(NSS_DRV_WIFI_EXT_VDEV_ENABLE)" "n"
ccflags-y += -DNSS_DRV_WIFI_EXT_VDEV_ENABLE
qca-nss-drv-objs += \
nss_wifi_ext_vdev.o \
nss_wifi_ext_vdev_stats.o \
nss_wifi_ext_vdev_log.o
endif
ifneq "$(NSS_DRV_WIFI_MESH_ENABLE)" "n"
ccflags-y += -DNSS_DRV_WIFI_MESH_ENABLE
qca-nss-drv-objs += \
nss_wifi_mesh.o \
nss_wifi_mesh_log.o \
nss_wifi_mesh_stats.o \
nss_wifi_mesh_strings.o
endif
ifneq "$(NSS_DRV_IPV4_REASM_ENABLE)" "n"
ccflags-y += -DNSS_DRV_IPV4_REASM_ENABLE
qca-nss-drv-objs += \
nss_ipv4_reasm.o \
nss_ipv4_reasm_stats.o \
nss_ipv4_reasm_strings.o
endif
ifneq "$(NSS_DRV_L2TP_ENABLE)" "n"
ccflags-y += -DNSS_DRV_L2TP_ENABLE
qca-nss-drv-objs += \
@@ -109,6 +124,22 @@ qca-nss-drv-objs += \
nss_pvxlan_stats.o
endif
ifneq "$(NSS_DRV_IPV6_ENABLE)" "n"
ccflags-y += -DNSS_DRV_IPV6_ENABLE
qca-nss-drv-objs += \
nss_ipv6.o \
nss_ipv6_stats.o \
nss_ipv6_strings.o \
nss_ipv6_log.o
ifneq "$(NSS_DRV_IPV6_REASM_ENABLE)" "n"
ccflags-y += -DNSS_DRV_IPV6_REASM_ENABLE
qca-nss-drv-objs += \
nss_ipv6_reasm.o \
nss_ipv6_reasm_stats.o \
nss_ipv6_reasm_strings.o
endif
endif
ifneq "$(NSS_DRV_TSTAMP_ENABLE)" "n"
ccflags-y += -DNSS_DRV_TSTAMP_ENABLE
qca-nss-drv-objs += \
@@ -121,7 +152,8 @@ ccflags-y += -DNSS_DRV_GRE_ENABLE
qca-nss-drv-objs += \
nss_gre.o \
nss_gre_log.o \
nss_gre_stats.o
nss_gre_stats.o \
nss_gre_strings.o
endif
ifneq "$(NSS_DRV_GRE_REDIR_ENABLE)" "n"
@@ -132,13 +164,17 @@ qca-nss-drv-objs += \
nss_gre_redir_lag_ds.o \
nss_gre_redir_lag_ds_log.o \
nss_gre_redir_lag_ds_stats.o \
nss_gre_redir_lag_ds_strings.o \
nss_gre_redir_lag_us.o \
nss_gre_redir_lag_us_log.o \
nss_gre_redir_lag_us_stats.o \
nss_gre_redir_lag_us_strings.o \
nss_gre_redir_stats.o \
nss_gre_redir_strings.o \
nss_gre_redir_mark.o \
nss_gre_redir_mark_log.o \
nss_gre_redir_mark_stats.o
nss_gre_redir_mark_stats.o \
nss_gre_redir_mark_strings.o
endif
ifneq "$(NSS_DRV_GRE_TUNNEL_ENABLE)" "n"
@@ -146,7 +182,8 @@ ccflags-y += -DNSS_DRV_GRE_TUNNEL_ENABLE
qca-nss-drv-objs += \
nss_gre_tunnel.o \
nss_gre_tunnel_log.o \
nss_gre_tunnel_stats.o
nss_gre_tunnel_stats.o \
nss_gre_tunnel_strings.o
endif
ifneq "$(NSS_DRV_CAPWAP_ENABLE)" "n"
@@ -255,7 +292,8 @@ ccflags-y += -DNSS_DRV_CLMAP_ENABLE
qca-nss-drv-objs += \
nss_clmap.o \
nss_clmap_log.o \
nss_clmap_stats.o
nss_clmap_stats.o \
nss_clmap_strings.o
endif
@@ -272,7 +310,8 @@ ccflags-y += -DNSS_DRV_MATCH_ENABLE
qca-nss-drv-objs += \
nss_match.o \
nss_match_log.o \
nss_match_stats.o
nss_match_stats.o \
nss_match_strings.o
endif
ifneq "$(NSS_DRV_MIRROR_ENABLE)" "n"
@@ -280,7 +319,17 @@ ccflags-y += -DNSS_DRV_MIRROR_ENABLE
qca-nss-drv-objs += \
nss_mirror.o \
nss_mirror_log.o \
nss_mirror_stats.o
nss_mirror_stats.o \
nss_mirror_strings.o
endif
ifneq "$(NSS_DRV_UDP_ST_ENABLE)" "n"
ccflags-y += -DNSS_DRV_UDP_ST_ENABLE
qca-nss-drv-objs += \
nss_udp_st.o \
nss_udp_st_log.o \
nss_udp_st_stats.o \
nss_udp_st_strings.o
endif
ifeq ($(SoC),$(filter $(SoC),ipq806x))
@@ -330,6 +379,7 @@ qca-nss-drv-objs += nss_data_plane/nss_data_plane.o \
nss_ppe.o \
nss_ppe_log.o \
nss_ppe_stats.o \
nss_ppe_strings.o \
nss_ppe_vp.o \
nss_ppe_vp_log.o \
nss_ppe_vp_stats.o
@@ -341,7 +391,9 @@ ifneq "$(NSS_DRV_IPSEC_ENABLE)" "n"
ccflags-y += -DNSS_DRV_IPSEC_ENABLE
qca-nss-drv-objs += \
nss_ipsec_cmn_log.o \
nss_ipsec_cmn.o
nss_ipsec_cmn.o \
nss_ipsec_cmn_stats.o \
nss_ipsec_cmn_strings.o
endif
ifneq "$(NSS_DRV_CRYPTO_ENABLE)" "n"
@@ -351,6 +403,8 @@ ccflags-y += -DNSS_DRV_DMA_ENABLE
qca-nss-drv-objs += \
nss_crypto_cmn.o \
nss_crypto_cmn_log.o \
nss_crypto_cmn_stats.o \
nss_crypto_cmn_strings.o \
nss_dma.o \
nss_dma_log.o \
nss_dma_stats.o \
@@ -361,21 +415,26 @@ ifneq "$(NSS_DRV_DTLS_ENABLE)" "n"
ccflags-y += -DNSS_DRV_DTLS_ENABLE
qca-nss-drv-objs += \
nss_dtls_cmn.o \
nss_dtls_cmn_log.o
nss_dtls_cmn_log.o \
nss_dtls_cmn_stats.o \
nss_dtls_cmn_strings.o
endif
ifneq "$(NSS_DRV_QVPN_ENABLE)" "n"
ccflags-y += -DNSS_DRV_QVPN_ENABLE
qca-nss-drv-objs += \
nss_qvpn.o \
nss_qvpn_stats.o \
nss_qvpn_log.o
nss_qvpn.o \
nss_qvpn_log.o \
nss_qvpn_stats.o \
nss_qvpn_strings.o
endif
ifneq "$(NSS_DRV_TLS_ENABLE)" "n"
ccflags-y += -DNSS_DRV_TLS_ENABLE
qca-nss-drv-objs += \
nss_tls.o \
nss_tls_log.o
nss_tls_log.o \
nss_tls_stats.o \
nss_tls_strings.o
endif
endif
@@ -411,21 +470,27 @@ ifneq "$(NSS_DRV_IPSEC_ENABLE)" "n"
ccflags-y += -DNSS_DRV_IPSEC_ENABLE
qca-nss-drv-objs += \
nss_ipsec_cmn_log.o \
nss_ipsec_cmn.o
nss_ipsec_cmn.o \
nss_ipsec_cmn_stats.o \
nss_ipsec_cmn_strings.o
endif
ifneq "$(NSS_DRV_CRYPTO_ENABLE)" "n"
ccflags-y += -DNSS_DRV_CRYPTO_ENABLE
qca-nss-drv-objs += \
nss_crypto_cmn.o \
nss_crypto_cmn_log.o
nss_crypto_cmn_log.o \
nss_crypto_cmn_stats.o \
nss_crypto_cmn_strings.o
endif
ifneq "$(NSS_DRV_DTLS_ENABLE)" "n"
ccflags-y += -DNSS_DRV_DTLS_ENABLE
qca-nss-drv-objs += \
nss_dtls_cmn.o \
nss_dtls_cmn_log.o
nss_dtls_cmn_log.o \
nss_dtls_cmn_stats.o \
nss_dtls_cmn_strings.o
endif
ccflags-y += -I$(obj)/nss_hal/ipq50xx -DNSS_HAL_IPQ50XX_SUPPORT -DNSS_MULTI_H2N_DATA_RING_SUPPORT
endif
@@ -433,7 +498,7 @@ endif
ccflags-y += -I$(obj)/nss_hal/include -I$(obj)/nss_data_plane/include -I$(obj)/exports -DNSS_DEBUG_LEVEL=0 -DNSS_PKT_STATS_ENABLED=1
ccflags-y += -I$(obj)/nss_data_plane/hal/include
ccflags-y += -DNSS_PM_DEBUG_LEVEL=0 -DNSS_SKB_REUSE_SUPPORT=1
ccflags-y += -Werror
ccflags-y += -Wall -Werror
KERNELVERSION := $(word 1, $(subst ., ,$(KERNELVERSION))).$(word 2, $(subst ., ,$(KERNELVERSION)))

524
feeds/ipq807x/qca-nss-drv/src/exports/nss_api_if.h Normal file → Executable file
View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2013-2021, 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.
@@ -65,7 +65,6 @@
#include "nss_wifi_vdev.h"
#include "nss_n2h.h"
#include "nss_rps.h"
#include "nss_wifi_if.h"
#include "nss_portid.h"
#include "nss_oam.h"
#include "nss_dtls.h"
@@ -100,6 +99,10 @@
#include "nss_lso_rx.h"
#include "nss_wifi_mac_db_if.h"
#include "nss_wifi_ext_vdev_if.h"
#include "nss_wifili_if.h"
#include "nss_ppe_vp.h"
#include "nss_wifi_mesh.h"
#include "nss_udp_st.h"
#endif
#endif /*__KERNEL__ */
@@ -120,7 +123,7 @@
#define NSS_MAX_PHYSICAL_INTERFACES 8 /**< Maximum number of physical interfaces. */
#define NSS_MAX_VIRTUAL_INTERFACES 16 /**< Maximum number of virtual interfaces. */
#define NSS_MAX_TUNNEL_INTERFACES 4 /**< Maximum number of tunnel interfaces. */
#define NSS_MAX_SPECIAL_INTERFACES 68 /**< Maximum number of special interfaces. */
#define NSS_MAX_SPECIAL_INTERFACES 69 /**< Maximum number of special interfaces. */
#define NSS_MAX_WIFI_RADIO_INTERFACES 3 /**< Maximum number of radio interfaces. */
/*
@@ -271,511 +274,12 @@
#define NSS_DMA_INTERFACE (NSS_SPECIAL_IF_START + 66)
/**< Special interface number for the DMA interface. */
#define NSS_WIFI_EXT_VDEV_INTERFACE (NSS_SPECIAL_IF_START + 67)
/**< Special interface number for WiFi extended virtual interface. */
/**< Special interface number for the Wi-Fi extended virtual interface. */
#define NSS_UDP_ST_INTERFACE (NSS_SPECIAL_IF_START + 68)
/**< Special interface number for the UDP speed test interface. */
#ifdef __KERNEL__ /* only kernel will use. */
/**
* Wireless Multimedia Extention Access Category to TID. @hideinitializer
*/
#define NSS_WIFILI_WME_AC_TO_TID(_ac) ( \
((_ac) == NSS_WIFILI_WME_AC_VO) ? 6 : \
(((_ac) == NSS_WIFILI_WME_AC_VI) ? 5 : \
(((_ac) == NSS_WIFILI_WME_AC_BK) ? 1 : \
0)))
/**
* Wireless TID to Wireless Extension Multimedia Access Category. @hideinitializer
*/
#define NSS_WIFILI_TID_TO_WME_AC(_tid) ( \
(((_tid) == 0) || ((_tid) == 3)) ? NSS_WIFILI_WME_AC_BE : \
((((_tid) == 1) || ((_tid) == 2)) ? NSS_WIFILI_WME_AC_BK : \
((((_tid) == 4) || ((_tid) == 5)) ? NSS_WIFILI_WME_AC_VI : \
NSS_WIFILI_WME_AC_VO)))
/**
* Converts the format of an IPv6 address from Linux to NSS. @hideinitializer
*/
#define IN6_ADDR_TO_IPV6_ADDR(ipv6, in6) \
{ \
((uint32_t *)ipv6)[0] = in6.in6_u.u6_addr32[0]; \
((uint32_t *)ipv6)[1] = in6.in6_u.u6_addr32[1]; \
((uint32_t *)ipv6)[2] = in6.in6_u.u6_addr32[2]; \
((uint32_t *)ipv6)[3] = in6.in6_u.u6_addr32[3]; \
}
/**
* Converts the format of an IPv6 address from NSS to Linux. @hideinitializer
*/
#define IPV6_ADDR_TO_IN6_ADDR(in6, ipv6) \
{ \
in6.in6_u.u6_addr32[0] = ((uint32_t *)ipv6)[0]; \
in6.in6_u.u6_addr32[1] = ((uint32_t *)ipv6)[1]; \
in6.in6_u.u6_addr32[2] = ((uint32_t *)ipv6)[2]; \
in6.in6_u.u6_addr32[3] = ((uint32_t *)ipv6)[3]; \
}
/**
* Format of an IPv6 address (16 * 8 bits).
*/
#define IPV6_ADDR_OCTAL_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
/**
* Prints an IPv6 address (16 * 8 bits).
*/
#define IPV6_ADDR_TO_OCTAL(ipv6) ((uint16_t *)ipv6)[0], ((uint16_t *)ipv6)[1], ((uint16_t *)ipv6)[2], ((uint16_t *)ipv6)[3], ((uint16_t *)ipv6)[4], ((uint16_t *)ipv6)[5], ((uint16_t *)ipv6)[6], ((uint16_t *)ipv6)[7]
/*
* IPv4 rule sync reasons.
*/
#define NSS_IPV4_SYNC_REASON_STATS 0 /**< Rule for synchronizing statistics. */
#define NSS_IPV4_SYNC_REASON_FLUSH 1 /**< Rule for flushing a cache entry. */
#define NSS_IPV4_SYNC_REASON_EVICT 2 /**< Rule for evicting a cache entry. */
#define NSS_IPV4_SYNC_REASON_DESTROY 3
/**< Rule for destroying a cache entry (requested by the host OS). */
#define NSS_IPV4_SYNC_REASON_PPPOE_DESTROY 4
/**< Rule for destroying a cache entry that belongs to a PPPoE session. */
/**
* nss_ipv4_create
* Information for an IPv4 flow or connection create rule.
*
* All fields must be passed in host-endian order.
*/
struct nss_ipv4_create {
int32_t src_interface_num;
/**< Source interface number (virtual or physical). */
int32_t dest_interface_num;
/**< Destination interface number (virtual or physical). */
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t flags; /**< Flags (if any) associated with this rule. */
uint32_t from_mtu; /**< MTU of the incoming interface. */
uint32_t to_mtu; /**< MTU of the outgoing interface. */
uint32_t src_ip; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t src_ip_xlate; /**< Translated source IP address (used with SNAT). */
int32_t src_port_xlate; /**< Translated source L4 port (used with SNAT). */
uint32_t dest_ip; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip_xlate;
/**< Translated destination IP address (used with DNAT). */
int32_t dest_port_xlate;
/**< Translated destination L4 port (used with DNAT). */
uint8_t src_mac[ETH_ALEN];
/**< Source MAC address. */
uint8_t dest_mac[ETH_ALEN];
/**< Destination MAC address. */
uint8_t src_mac_xlate[ETH_ALEN];
/**< Translated source MAC address (post-routing). */
uint8_t dest_mac_xlate[ETH_ALEN];
/**< Translated destination MAC address (post-routing). */
uint8_t flow_window_scale; /**< Window scaling factor (TCP). */
uint32_t flow_max_window; /**< Maximum window size (TCP). */
uint32_t flow_end; /**< TCP window end. */
uint32_t flow_max_end; /**< TCP window maximum end. */
uint32_t flow_pppoe_if_exist;
/**< Flow direction: PPPoE interface exist flag. */
int32_t flow_pppoe_if_num;
/**< Flow direction: PPPoE interface number. */
uint16_t ingress_vlan_tag; /**< Ingress VLAN tag expected for this flow. */
uint8_t return_window_scale;
/**< Window scaling factor of the return direction (TCP). */
uint32_t return_max_window;
/**< Maximum window size of the return direction. */
uint32_t return_end;
/**< Flow end for the return direction. */
uint32_t return_max_end;
/**< Flow maximum end for the return direction. */
uint32_t return_pppoe_if_exist;
/**< Return direction: PPPoE interface existence flag. */
int32_t return_pppoe_if_num;
/**< Return direction: PPPoE interface number. */
uint16_t egress_vlan_tag; /**< Egress VLAN tag expected for this flow. */
uint8_t spo_needed; /**< Indicates whether SPO is required. */
uint32_t param_a0; /**< Custom parameter 0. */
uint32_t param_a1; /**< Custom parameter 1. */
uint32_t param_a2; /**< Custom parameter 2. */
uint32_t param_a3; /**< Custom parameter 3. */
uint32_t param_a4; /**< Custom parameter 4. */
uint32_t qos_tag; /**< Deprecated, will be removed soon. */
uint32_t flow_qos_tag; /**< QoS tag value for the flow direction. */
uint32_t return_qos_tag; /**< QoS tag value for the return direction. */
uint8_t dscp_itag; /**< DSCP marking tag. */
uint8_t dscp_imask; /**< DSCP marking input mask. */
uint8_t dscp_omask; /**< DSCP marking output mask. */
uint8_t dscp_oval; /**< DSCP marking output value. */
uint16_t vlan_itag; /**< VLAN marking tag. */
uint16_t vlan_imask; /**< VLAN marking input mask. */
uint16_t vlan_omask; /**< VLAN marking output mask. */
uint16_t vlan_oval; /**< VLAN marking output value. */
uint32_t in_vlan_tag[MAX_VLAN_DEPTH];
/**< Ingress VLAN tag expected for this flow. */
uint32_t out_vlan_tag[MAX_VLAN_DEPTH];
/**< Egress VLAN tag expected for this flow. */
uint8_t flow_dscp; /**< IP DSCP value for the flow direction. */
uint8_t return_dscp; /**< IP DSCP value for the return direction. */
};
/*
* IPv4 connection flags (to be used with nss_ipv4_create::flags).
*/
#define NSS_IPV4_CREATE_FLAG_NO_SEQ_CHECK 0x01
/**< Rule for not checking sequence numbers. */
#define NSS_IPV4_CREATE_FLAG_BRIDGE_FLOW 0x02
/**< Rule that indicates pure bridge flow (no routing is involved). */
#define NSS_IPV4_CREATE_FLAG_ROUTED 0x04 /**< Rule for a routed connection. */
#define NSS_IPV4_CREATE_FLAG_DSCP_MARKING 0x08 /**< Rule for DSCP marking. */
#define NSS_IPV4_CREATE_FLAG_VLAN_MARKING 0x10 /**< Rule for VLAN marking. */
#define NSS_IPV4_CREATE_FLAG_QOS_VALID 0x20 /**< Rule for QoS is valid. */
/**
* nss_ipv4_destroy
* Information for an IPv4 flow or connection destroy rule.
*/
struct nss_ipv4_destroy {
int32_t protocol; /**< L4 protocol ID. */
uint32_t src_ip; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
};
/*
* IPv6 rule sync reasons.
*/
#define NSS_IPV6_SYNC_REASON_STATS 0 /**< Rule for synchronizing statistics. */
#define NSS_IPV6_SYNC_REASON_FLUSH 1 /**< Rule for flushing a cache entry. */
#define NSS_IPV6_SYNC_REASON_EVICT 2 /**< Rule for evicting a cache entry. */
#define NSS_IPV6_SYNC_REASON_DESTROY 3
/**< Rule for destroying a cache entry (requested by the host OS). */
#define NSS_IPV6_SYNC_REASON_PPPOE_DESTROY 4
/**< Rule for destroying a cache entry that belongs to a PPPoE session. */
/**
* nss_ipv6_create
* Information for an IPv6 flow or connection create rule.
*
* All fields must be passed in host-endian order.
*/
struct nss_ipv6_create {
int32_t src_interface_num;
/**< Source interface number (virtual or physical). */
int32_t dest_interface_num;
/**< Destination interface number (virtual or physical). */
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t flags; /**< Flags (if any) associated with this rule. */
uint32_t from_mtu; /**< MTU of the incoming interface. */
uint32_t to_mtu; /**< MTU of the outgoing interface. */
uint32_t src_ip[4]; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip[4]; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
uint8_t src_mac[ETH_ALEN]; /**< Source MAC address. */
uint8_t dest_mac[ETH_ALEN]; /**< Destination MAC address. */
uint8_t flow_window_scale; /**< Window scaling factor (TCP). */
uint32_t flow_max_window; /**< Maximum window size (TCP). */
uint32_t flow_end; /**< TCP window end. */
uint32_t flow_max_end; /**< TCP window maximum end. */
uint32_t flow_pppoe_if_exist;
/**< Flow direction: PPPoE interface existence flag. */
int32_t flow_pppoe_if_num;
/**< Flow direction: PPPoE interface number. */
uint16_t ingress_vlan_tag;
/**< Ingress VLAN tag expected for this flow. */
uint8_t return_window_scale;
/**< Window scaling factor (TCP) for the return direction. */
uint32_t return_max_window;
/**< Maximum window size (TCP) for the return direction. */
uint32_t return_end;
/**< End for the return direction. */
uint32_t return_max_end;
/**< Maximum end for the return direction. */
uint32_t return_pppoe_if_exist;
/**< Return direction: PPPoE interface exist flag. */
int32_t return_pppoe_if_num;
/**< Return direction: PPPoE interface number. */
uint16_t egress_vlan_tag; /**< Egress VLAN tag expected for this flow. */
uint32_t qos_tag; /**< Deprecated; will be removed soon. */
uint32_t flow_qos_tag; /**< QoS tag value for flow direction. */
uint32_t return_qos_tag; /**< QoS tag value for the return direction. */
uint8_t dscp_itag; /**< DSCP marking tag. */
uint8_t dscp_imask; /**< DSCP marking input mask. */
uint8_t dscp_omask; /**< DSCP marking output mask. */
uint8_t dscp_oval; /**< DSCP marking output value. */
uint16_t vlan_itag; /**< VLAN marking tag. */
uint16_t vlan_imask; /**< VLAN marking input mask. */
uint16_t vlan_omask; /**< VLAN marking output mask. */
uint16_t vlan_oval; /**< VLAN marking output value. */
uint32_t in_vlan_tag[MAX_VLAN_DEPTH];
/**< Ingress VLAN tag expected for this flow. */
uint32_t out_vlan_tag[MAX_VLAN_DEPTH];
/**< Egress VLAN tag expected for this flow. */
uint8_t flow_dscp; /**< IP DSCP value for flow direction. */
uint8_t return_dscp; /**< IP DSCP value for the return direction. */
};
/*
* IPv6 connection flags (to be used with nss_ipv6_create::flags.
*/
#define NSS_IPV6_CREATE_FLAG_NO_SEQ_CHECK 0x1
/**< Indicates that sequence numbers are not to be checked. */
#define NSS_IPV6_CREATE_FLAG_BRIDGE_FLOW 0x02
/**< Indicates that this is a pure bridge flow (no routing is involved). */
#define NSS_IPV6_CREATE_FLAG_ROUTED 0x04 /**< Rule is for a routed connection. */
#define NSS_IPV6_CREATE_FLAG_DSCP_MARKING 0x08 /**< Rule for DSCP marking. */
#define NSS_IPV6_CREATE_FLAG_VLAN_MARKING 0x10 /**< Rule for VLAN marking. */
#define NSS_IPV6_CREATE_FLAG_QOS_VALID 0x20 /**< Rule for Valid QoS. */
/**
* nss_ipv6_destroy
* Information for an IPv6 flow or connection destroy rule.
*/
struct nss_ipv6_destroy {
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t src_ip[4]; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip[4]; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
};
/**
* nss_ipv4_sync
* Defines packet statistics for IPv4 and also keeps the connection entry alive.
*
* Statistics are bytes and packets seen over a connection.
*
* The addresses are NON-NAT addresses (i.e., true endpoint
* addressing).
*
* The source (src) creates the connection.
*/
struct nss_ipv4_sync {
uint32_t index; /**< Slot ID for cache statistics to host OS. */
/*TODO: use an opaque information as host and NSS
may be using a different mechanism to store rules. */
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t src_ip; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t src_ip_xlate; /**< Translated source IP address (used with SNAT). */
int32_t src_port_xlate; /**< Translated source L4 port (used with SNAT). */
uint32_t dest_ip; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip_xlate;
/**< Translated destination IP address (used with DNAT). */
int32_t dest_port_xlate;
/**< Translated destination L4 port (used with DNAT). */
uint32_t flow_max_window; /**< Maximum window size (TCP). */
uint32_t flow_end; /**< TCP window end. */
uint32_t flow_max_end; /**< TCP window maximum end. */
uint32_t flow_rx_packet_count; /**< Rx packet count for the flow interface. */
uint32_t flow_rx_byte_count; /**< Rx byte count for the flow interface. */
uint32_t flow_tx_packet_count; /**< Tx packet count for the flow interface. */
uint32_t flow_tx_byte_count; /**< Tx byte count for the flow interface. */
uint32_t return_max_window;
/**< Maximum window size (TCP) for the return direction. */
uint32_t return_end;
/**< End for the return direction. */
uint32_t return_max_end;
/**< Maximum end for the return direction. */
uint32_t return_rx_packet_count;
/**< Rx packet count for the return direction. */
uint32_t return_rx_byte_count;
/**< Rx byte count for the return direction. */
uint32_t return_tx_packet_count;
/**< Tx packet count for the return direction. */
uint32_t return_tx_byte_count;
/**< Tx byte count for the return direction. */
/**
* Time in Linux jiffies to be added to the current timeout to keep the
* connection alive.
*/
unsigned long int delta_jiffies;
uint8_t reason; /**< Reason for synchronization. */
uint32_t param_a0; /**< Custom parameter 0. */
uint32_t param_a1; /**< Custom parameter 1. */
uint32_t param_a2; /**< Custom parameter 2. */
uint32_t param_a3; /**< Custom parameter 3. */
uint32_t param_a4; /**< Custom parameter 4. */
uint8_t flags; /**< Flags indicating the status of the flow. */
uint32_t qos_tag; /**< QoS value of the flow. */
};
/**
* nss_ipv4_establish
* Defines connection-established message parameters for IPv4.
*/
struct nss_ipv4_establish {
uint32_t index; /**< Slot ID for cache statistics to host OS. */
/*TODO: use an opaque information as host and NSS
may be using a different mechanism to store rules. */
uint8_t protocol; /**< Protocol number. */
uint8_t reserved[3]; /**< Padding for word alignment. */
int32_t flow_interface; /**< Flow interface number. */
uint32_t flow_mtu; /**< MTU for the flow interface. */
uint32_t flow_ip; /**< Flow IP address. */
uint32_t flow_ip_xlate; /**< Translated flow IP address. */
uint32_t flow_ident; /**< Flow identifier (e.g., port). */
uint32_t flow_ident_xlate; /**< Translated flow identifier (e.g., port). */
uint16_t flow_mac[3]; /**< Source MAC address for the flow direction. */
uint32_t flow_pppoe_if_exist; /**< Flow direction: PPPoE interface existence flag. */
int32_t flow_pppoe_if_num; /**< Flow direction: PPPoE interface number. */
uint16_t ingress_vlan_tag; /**< Ingress VLAN tag. */
int32_t return_interface; /**< Return interface number. */
uint32_t return_mtu; /**< MTU for the return interface. */
uint32_t return_ip; /**< Return IP address. */
uint32_t return_ip_xlate; /**< Translated return IP address. */
uint32_t return_ident; /**< Return identier (e.g., port). */
uint32_t return_ident_xlate; /**< Translated return identifier (e.g., port). */
uint16_t return_mac[3]; /**< Source MAC address for the return direction. */
uint32_t return_pppoe_if_exist; /**< Return direction: PPPoE interface existence flag. */
int32_t return_pppoe_if_num; /**< Return direction: PPPoE interface number. */
uint16_t egress_vlan_tag; /**< Egress VLAN tag. */
uint8_t flags; /**< Flags indicating the status of the flow. */
uint32_t qos_tag; /**< QoS value of the flow. */
};
/**
* nss_ipv4_cb_reason
* Reasons for an IPv4 callback.
*/
enum nss_ipv4_cb_reason {
NSS_IPV4_CB_REASON_ESTABLISH = 0,
NSS_IPV4_CB_REASON_SYNC,
NSS_IPV4_CB_REASON_ESTABLISH_FAIL,
};
/**
* nss_ipv4_cb_params
* Message parameters for an IPv4 callback.
*/
struct nss_ipv4_cb_params {
enum nss_ipv4_cb_reason reason; /**< Reason for the callback. */
/**
* Message parameters for an IPv4 callback.
*/
union {
struct nss_ipv4_sync sync;
/**< Parameters for synchronization. */
struct nss_ipv4_establish establish;
/**< Parameters for establishing a connection. */
} params; /**< Payload of parameters. */
};
/**
* nss_ipv6_sync
* Update packet statistics (bytes and packets seen over a connection) and also keep the connection entry alive.
*
* The addresses are NON-NAT addresses (i.e., true endpoint addressing).
*
* The source (src) creates the connection.
*/
struct nss_ipv6_sync {
uint32_t index; /**< Slot ID for cache statistics to the host OS. */
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t src_ip[4]; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip[4]; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
uint32_t flow_max_window; /**< Maximum window size (TCP). */
uint32_t flow_end; /**< TCP window end. */
uint32_t flow_max_end; /**< TCP window maximum end. */
uint32_t flow_rx_packet_count; /**< Rx packet count for the flow interface. */
uint32_t flow_rx_byte_count; /**< Rx byte count for the flow interface. */
uint32_t flow_tx_packet_count; /**< Tx packet count for the flow interface. */
uint32_t flow_tx_byte_count; /**< Tx byte count for the flow interface. */
uint32_t return_max_window;
/**< Maximum window size (TCP) for the return direction. */
uint32_t return_end;
/**< End for the return direction. */
uint32_t return_max_end;
/**< Maximum end for the return direction. */
uint32_t return_rx_packet_count;
/**< Rx packet count for the return direction. */
uint32_t return_rx_byte_count;
/**< Rx byte count for the return direction. */
uint32_t return_tx_packet_count;
/**< Tx packet count for the return direction. */
uint32_t return_tx_byte_count;
/**< Tx byte count for the return direction. */
/**
* Time in Linux jiffies to be added to the current timeout to keep the
* connection alive.
*/
unsigned long int delta_jiffies;
/**
* Non-zero when the NA has ceased to accelerate the given connection.
*/
uint8_t final_sync;
uint8_t evicted; /**< Non-zero if the connection is evicted. */
uint8_t flags; /**< Flags indicating the status of the flow. */
uint32_t qos_tag; /**< QoS value of the flow. */
};
/**
* nss_ipv6_establish
* Defines connection-established message parameters for IPv6.
*/
struct nss_ipv6_establish {
uint32_t index; /**< Slot ID for cache statistics to the host OS. */
uint8_t protocol; /**< Protocol number. */
int32_t flow_interface; /**< Flow interface number. */
uint32_t flow_mtu; /**< MTU for the flow interface. */
uint32_t flow_ip[4]; /**< Flow IP address. */
uint32_t flow_ident; /**< Flow identifier (e.g., port). */
uint16_t flow_mac[3]; /**< Source MAC address for the flow direction. */
uint32_t flow_pppoe_if_exist; /**< Flow direction: PPPoE interface existence flag. */
int32_t flow_pppoe_if_num; /**< Flow direction: PPPoE interface number. */
uint16_t ingress_vlan_tag; /**< Ingress VLAN tag. */
int32_t return_interface; /**< Return interface number. */
uint32_t return_mtu; /**< MTU for the return interface. */
uint32_t return_ip[4]; /**< Return IP address. */
uint32_t return_ident; /**< Return identier (e.g., port). */
uint16_t return_mac[3]; /**< Source MAC address for the return direction. */
uint32_t return_pppoe_if_exist; /**< Return direction: PPPoE interface existence flag. */
int32_t return_pppoe_if_num; /**< Return direction: PPPoE interface number. */
uint16_t egress_vlan_tag; /**< VLAN tag to be inserted for egress direction. */
uint8_t flags; /**< Flags indicating the status of the flow. */
uint32_t qos_tag; /**< QoS value of the flow. */
};
/**
* nss_ipv6_cb_reason
* Reasons for an IPv6 callback.
*/
enum nss_ipv6_cb_reason {
NSS_IPV6_CB_REASON_ESTABLISH = 0,
NSS_IPV6_CB_REASON_SYNC,
NSS_IPV6_CB_REASON_ESTABLISH_FAIL,
};
/**
* nss_ipv6_cb_params
* Message parameters for an IPv6 callback.
*/
struct nss_ipv6_cb_params {
enum nss_ipv6_cb_reason reason; /**< Reason for the callback. */
/**
* Message parameters for an IPv6 callback.
*/
union {
struct nss_ipv6_sync sync;
/**< Parameters for synchronization. */
struct nss_ipv6_establish establish;
/**< Parameters for establishing a connection. */
} params; /**< Callback parameters. */
};
/*
* General utilities
*/
@@ -791,16 +295,6 @@ struct nss_ipv6_cb_params {
*/
typedef void (*nss_if_rx_msg_callback_t)(void *app_data, struct nss_cmn_msg *msg);
/**
* Callback function for IPv4 connection synchronization messages.
*
* @datatypes
* nss_ipv4_cb_params
*
* @param[in] nicb Pointer to the parameter structure for an NSS IPv4 callback.
*/
typedef void (*nss_ipv4_callback_t)(struct nss_ipv4_cb_params *nicb);
/**
* nss_get_state
* Gets the NSS state.

View File

@@ -139,8 +139,8 @@ struct nss_capwap_stats_msg {
uint32_t rx_frag_timeout_drops;
/**< Packets dropped because of a reassembly timeout. */
uint32_t rx_queue_full_drops;
/**< Packets dropped because the queue is full. */
uint32_t rx_n2h_drops;
/**< Packets dropped because of error in packet processing. */
uint32_t rx_n2h_queue_full_drops;
/**< Packets dropped because the NSS-to-host queue is full. */
uint32_t rx_csum_drops;
@@ -297,6 +297,14 @@ struct nss_capwap_flow_rule_msg {
uint32_t flow_id; /**< Flow identification. */
};
/**
* nss_capwap_enable_tunnel_msg
* Structure to update sibling interface number.
*/
struct nss_capwap_enable_tunnel_msg {
uint32_t sibling_if_num; /**< Sibling interface Number. */
};
/**
* nss_capwap_msg
* Data for sending and receiving CAPWAP messages.
@@ -322,6 +330,8 @@ struct nss_capwap_msg {
/**< Flow rule add message. */
struct nss_capwap_flow_rule_msg flow_rule_del;
/**< Flow rule delete message. */
struct nss_capwap_enable_tunnel_msg enable_tunnel;
/**< Enable tunnel message. */
} msg; /**< Message payload. */
};
@@ -358,8 +368,8 @@ struct nss_capwap_tunnel_stats {
uint64_t rx_frag_timeout_drops;
/**< Packets dropped because of a reassembly timeout. */
uint64_t rx_queue_full_drops;
/**< Packets dropped because the queue is full. */
uint64_t rx_n2h_drops;
/**< Packets dropped because of error in processing the packet. */
uint64_t rx_n2h_queue_full_drops;
/**< Packets dropped because the NSS-to-host queue is full. */
uint64_t rx_csum_drops;
@@ -374,6 +384,7 @@ struct nss_capwap_tunnel_stats {
/*
* Tx/encap stats
*/
uint64_t tx_dropped_inner; /**<Packets dropped due to inflow queue full. */
uint64_t tx_segments; /**< Number of segments or fragments. */
uint64_t tx_queue_full_drops;
/**< Packets dropped because the queue is full. */

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2019-2021, 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.
@@ -67,6 +67,50 @@ typedef enum nss_clmap_error_types {
NSS_CLMAP_ERROR_MAX, /**< Maximum error type. */
} nss_clmap_error_t;
/**
* nss_clmap_interface_type
* Client map NSS interface type.
*/
enum nss_clmap_interface_type {
NSS_CLMAP_INTERFACE_TYPE_US,
NSS_CLMAP_INTERFACE_TYPE_DS,
NSS_CLMAP_INTERFACE_TYPE_MAX
};
/**
* nss_clmap_stats_type
* Client map statistic counters.
*/
enum nss_clmap_stats_type {
NSS_CLMAP_INTERFACE_STATS_RX_PKTS, /**< Number of packets received. */
NSS_CLMAP_INTERFACE_STATS_RX_BYTES, /**< Number of bytes received. */
NSS_CLMAP_INTERFACE_STATS_TX_PKTS, /**< Number of packets transmitted. */
NSS_CLMAP_INTERFACE_STATS_TX_BYTES, /**< Number of bytes transmitted. */
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_0_DROPPED, /**< Dropped receive packets 0. */
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_1_DROPPED, /**< Dropped receive packets 1. */
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_2_DROPPED, /**< Dropped receive packets 2. */
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_3_DROPPED, /**< Dropped receive packets 3. */
NSS_CLMAP_INTERFACE_STATS_DROPPED_MACDB_LOOKUP_FAILED, /**< Dropped due to MAC database look up failed. */
NSS_CLMAP_INTERFACE_STATS_DROPPED_INVALID_PACKET_SIZE, /**< Dropped due to invalid size packets. */
NSS_CLMAP_INTERFACE_STATS_DROPPED_LOW_HEADROOM, /**< Dropped due to insufficent headroom. */
NSS_CLMAP_INTERFACE_STATS_DROPPED_NEXT_NODE_QUEUE_FULL, /**< Dropped due to next node queue full. */
NSS_CLMAP_INTERFACE_STATS_DROPPED_PBUF_ALLOC_FAILED, /**< Dropped due to buffer allocation failure. */
NSS_CLMAP_INTERFACE_STATS_DROPPED_LINEAR_FAILED, /**< Dropped due to linear copy failure. */
NSS_CLMAP_INTERFACE_STATS_SHARED_PACKET_CNT, /**< Shared packet count. */
NSS_CLMAP_INTERFACE_STATS_ETHERNET_FRAME_ERROR, /**< Ethernet frame error count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_CREATE_REQUESTS_CNT, /**< MAC database create requests count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_CREATE_MAC_EXISTS_CNT, /**< MAC database create failures, MAC exist count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_CREATE_MAC_TABLE_FULL_CNT,
/**< MAC database create failures, MAC database full count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_DESTROY_REQUESTS_CNT, /**< MAC database destroy requests count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_DESTROY_MAC_NOT_FOUND_CNT,
/**< MAC database destroy failures, MAC not found count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_DESTROY_MAC_UNHASHED_CNT,
/**< MAC database destroy failures, MAC unhashed count. */
NSS_CLMAP_INTERFACE_STATS_MACDB_FLUSH_REQUESTS_CNT, /**< MAC database flush requests count. */
NSS_CLMAP_INTERFACE_STATS_MAX, /**< Maximum statistics type. */
};
/**
* nss_clmap_stats_msg
* Per-interface statistics messages from the NSS firmware.
@@ -111,6 +155,16 @@ struct nss_clmap_flush_mac_msg {
uint32_t nexthop_ifnum; /**< Next hop interface number. */
};
/**
* nss_clmap_stats_notification
* Client map transmission statistics structure.
*/
struct nss_clmap_stats_notification {
uint64_t stats_ctx[NSS_CLMAP_INTERFACE_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_clmap_msg
* Data for sending and receiving client map messages.
@@ -301,6 +355,34 @@ extern void nss_clmap_init(void);
extern void nss_clmap_msg_init(struct nss_clmap_msg *ncm, uint16_t if_num, uint32_t type, uint32_t len,
nss_clmap_msg_callback_t cb, void *app_data);
/**
* nss_clmap_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_clmap_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_clmap_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_clmap_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014, 2016-2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2014, 2016-2020, 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.
@@ -27,6 +27,13 @@
* @{
*/
/*
* Interface Number 1 Valid 7 Core 8 Type 16 Index
*/
typedef int32_t nss_if_num_t;
#define NSS_IF_IS_TYPE_DYNAMIC(if_num) (if_num != -1)
#define NSS_IF_IS_VALID(if_num) (if_num < NSS_MAX_NET_INTERFACES)
/**
* @struct nss_ctx_instance
* Forward declaration for structure that contains instance data for each

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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
@@ -52,6 +52,43 @@ enum nss_dma_msg_error {
NSS_DMA_MSG_ERROR_MAX /**< Maximum error type. */
};
/**
* nss_dma_stats_types
* DMA node statistics.
*/
enum nss_dma_stats_types {
NSS_DMA_STATS_NO_REQ = NSS_STATS_NODE_MAX,
/**< Request descriptor not available. */
NSS_DMA_STATS_NO_DESC, /**< DMA descriptors not available. */
NSS_DMA_STATS_NEXTHOP, /**< Failed to retrive next hop. */
NSS_DMA_STATS_FAIL_NEXTHOP_QUEUE,
/**< Failed to queue next hop. */
NSS_DMA_STATS_FAIL_LINEAR_SZ, /**< Failed to get memory for linearization. */
NSS_DMA_STATS_FAIL_LINEAR_ALLOC,/**< Failed to allocate buffer for linearization. */
NSS_DMA_STATS_FAIL_LINEAR_NO_SG,/**< Skip linearization due to non-SG packet. */
NSS_DMA_STATS_FAIL_SPLIT_SZ, /**< Failed to spliting buffer into multiple buffers. */
NSS_DMA_STATS_FAIL_SPLIT_ALLOC, /**< Failed to allocate buffer for split. */
NSS_DMA_STATS_FAIL_SYNC_ALLOC, /**< Failed to allocate buffer for sending statistics. */
NSS_DMA_STATS_FAIL_CTX_ACTIVE, /**< Failed to queue as the node is not active. */
NSS_DMA_STATS_FAIL_HW_E0, /**< Failed to process in hardware, error code E0. */
NSS_DMA_STATS_FAIL_HW_E1, /**< Failed to process in hardware, error code E1. */
NSS_DMA_STATS_FAIL_HW_E2, /**< Failed to process in hardware, error code E2. */
NSS_DMA_STATS_FAIL_HW_E3, /**< Failed to process in hardware, error code E3. */
NSS_DMA_STATS_FAIL_HW_E4, /**< Failed to process in hardware, error code E4. */
NSS_DMA_STATS_FAIL_HW_E5, /**< Failed to process in hardware, error code E5. */
NSS_DMA_STATS_FAIL_HW_E6, /**< Failed to process in hardware, error code E6. */
NSS_DMA_STATS_FAIL_HW_E7, /**< Failed to process in hardware, error code E7. */
NSS_DMA_STATS_FAIL_HW_E8, /**< Failed to process in hardware, error code E8. */
NSS_DMA_STATS_FAIL_HW_E9, /**< Failed to process in hardware, error code E9. */
NSS_DMA_STATS_FAIL_HW_E10, /**< Failed to process in hardware, error code E10. */
NSS_DMA_STATS_FAIL_HW_E11, /**< Failed to process in hardware, error code E11. */
NSS_DMA_STATS_FAIL_HW_E12, /**< Failed to process in hardware, error code E12. */
NSS_DMA_STATS_FAIL_HW_E13, /**< Failed to process in hardware, error code E13. */
NSS_DMA_STATS_FAIL_HW_E14, /**< Failed to process in hardware, error code E14. */
NSS_DMA_STATS_FAIL_HW_E15, /**< Failed to process in hardware, error code E15. */
NSS_DMA_STATS_MAX, /**< Maximum message type. */
};
/**
* nss_dma_test_type
* DMA Test types.
@@ -64,6 +101,15 @@ enum nss_dma_test_type {
NSS_DMA_TEST_TYPE_MAX /**< Maximum test type. */
};
/**
* nss_dma_stats_notification
* DMA transmission statistics structure.
*/
struct nss_dma_stats_notification {
uint64_t stats_ctx[NSS_DMA_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
};
#ifdef __KERNEL__ /* only kernel will use. */
/*
* Maximum number of HW specific statistics
@@ -129,11 +175,6 @@ struct nss_dma_msg {
* nss_dma_register_handler
* Registers the DMA message handler.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
*
* @return
* None.
*/
@@ -255,6 +296,34 @@ void nss_dma_init(void);
* Pointer to the NSS core context.
*/
extern struct nss_ctx_instance *nss_dma_get_context(void);
/**
* nss_dma_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_dma_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_dma_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_dma_stats_register_notifier(struct notifier_block *nb);
#endif /*__KERNEL__ */
/**

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2021, 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.
@@ -74,6 +74,85 @@ enum nss_dtls_cmn_error {
NSS_DTLS_CMN_ERROR_MAX,
};
/**
* nss_dtls_cmn_ctx_stats_types
* DTLS common context statistics types.
*/
enum nss_dtls_cmn_ctx_stats_types {
NSS_DTLS_CMN_STATS_RX_SINGLE_REC = NSS_STATS_NODE_MAX,
/**< Received single DTLS record datagrams. */
NSS_DTLS_CMN_STATS_RX_MULTI_REC, /**< Received multiple DTLS record datagrams. */
NSS_DTLS_CMN_STATS_FAIL_CRYPTO_RESOURCE,/**< Failure in crypto resource allocation. */
NSS_DTLS_CMN_STATS_FAIL_CRYPTO_ENQUEUE, /**< Failure due to full queue in crypto or hardware. */
NSS_DTLS_CMN_STATS_FAIL_HEADROOM, /**< Failure in headroom check. */
NSS_DTLS_CMN_STATS_FAIL_TAILROOM, /**< Failure in tailroom check. */
NSS_DTLS_CMN_STATS_FAIL_VER, /**< Failure in DTLS version check. */
NSS_DTLS_CMN_STATS_FAIL_EPOCH, /**< Failure in DTLS epoch check. */
NSS_DTLS_CMN_STATS_FAIL_DTLS_RECORD, /**< Failure in reading DTLS record. */
NSS_DTLS_CMN_STATS_FAIL_CAPWAP, /**< Failure in CAPWAP classification. */
NSS_DTLS_CMN_STATS_FAIL_REPLAY, /**< Failure in anti-replay check. */
NSS_DTLS_CMN_STATS_FAIL_REPLAY_DUP, /**< Failure in anti-replay; duplicate records. */
NSS_DTLS_CMN_STATS_FAIL_REPLAY_WIN, /**< Failure in anti-replay; packet outside the window. */
NSS_DTLS_CMN_STATS_FAIL_QUEUE, /**< Failure due to full queue in DTLS. */
NSS_DTLS_CMN_STATS_FAIL_QUEUE_NEXTHOP, /**< Failure due to full queue in next hop. */
NSS_DTLS_CMN_STATS_FAIL_PBUF_ALLOC, /**< Failure in pbuf allocation. */
NSS_DTLS_CMN_STATS_FAIL_PBUF_LINEAR, /**< Failure in pbuf linearization. */
NSS_DTLS_CMN_STATS_FAIL_PBUF_STATS, /**< Failure in pbuf allocation for statistics. */
NSS_DTLS_CMN_STATS_FAIL_PBUF_ALIGN, /**< Failure in pbuf alignment. */
NSS_DTLS_CMN_STATS_FAIL_CTX_ACTIVE, /**< Failure in enqueue due to inactive context. */
NSS_DTLS_CMN_STATS_FAIL_HWCTX_ACTIVE, /**< Failure in enqueue due to inactive hardware context. */
NSS_DTLS_CMN_STATS_FAIL_CIPHER, /**< Failure in decrypting the data. */
NSS_DTLS_CMN_STATS_FAIL_AUTH, /**< Failure in authenticating the data. */
NSS_DTLS_CMN_STATS_FAIL_SEQ_OVF, /**< Failure due to sequence number overflow. */
NSS_DTLS_CMN_STATS_FAIL_BLK_LEN, /**< Failure in decapsulation due to bad cipher length. */
NSS_DTLS_CMN_STATS_FAIL_HASH_LEN, /**< Failure in decapsulation due to bad hash length. */
NSS_DTLS_CMN_STATS_LEN_ERROR, /**< Length error. */
NSS_DTLS_CMN_STATS_TOKEN_ERROR, /**< Token error, unknown token command or instruction. */
NSS_DTLS_CMN_STATS_BYPASS_ERROR, /**< Token contains too much bypass data. */
NSS_DTLS_CMN_STATS_CONFIG_ERROR, /**< Invalid command, algorithm, or mode combination. */
NSS_DTLS_CMN_STATS_ALGO_ERROR, /**< Unsupported algorithm. */
NSS_DTLS_CMN_STATS_HASH_OVF_ERROR, /**< Hash input overflow. */
NSS_DTLS_CMN_STATS_TTL_ERROR, /**< TTL or HOP-Limit underflow. */
NSS_DTLS_CMN_STATS_CSUM_ERROR, /**< Checksum error. */
NSS_DTLS_CMN_STATS_TIMEOUT_ERROR, /**< Data timed out. */
NSS_DTLS_CMN_STATS_CLE_ERROR_0, /**< Classification failure 0. */
NSS_DTLS_CMN_STATS_CLE_ERROR_1, /**< Classification failure 1. */
NSS_DTLS_CMN_STATS_CLE_ERROR_2, /**< Classification failure 2. */
NSS_DTLS_CMN_STATS_CLE_ERROR_3, /**< Classification failure 3. */
NSS_DTLS_CMN_STATS_CLE_ERROR_4, /**< Classification failure 4. */
NSS_DTLS_CMN_STATS_CLE_ERROR_5, /**< Classification failure 5. */
NSS_DTLS_CMN_STATS_CLE_ERROR_6, /**< Classification failure 6. */
NSS_DTLS_CMN_STATS_CLE_ERROR_7, /**< Classification failure 7. */
NSS_DTLS_CMN_STATS_CLE_ERROR_8, /**< Classification failure 8. */
NSS_DTLS_CMN_STATS_CLE_ERROR_9, /**< Classification failure 9. */
NSS_DTLS_CMN_STATS_CLE_ERROR_10, /**< Classification failure 10. */
NSS_DTLS_CMN_STATS_CLE_ERROR_11, /**< Classification failure 11. */
NSS_DTLS_CMN_STATS_CLE_ERROR_12, /**< Classification failure 12. */
NSS_DTLS_CMN_STATS_CLE_ERROR_13, /**< Classification failure 13. */
NSS_DTLS_CMN_STATS_CLE_ERROR_14, /**< Classification failure 14. */
NSS_DTLS_CMN_STATS_CLE_ERROR_15, /**< Classification failure 15. */
NSS_DTLS_CMN_STATS_CLE_ERROR_16, /**< Classification failure 16. */
NSS_DTLS_CMN_STATS_CLE_ERROR_17, /**< Classification failure 17. */
NSS_DTLS_CMN_STATS_CLE_ERROR_18, /**< Classification failure 18. */
NSS_DTLS_CMN_STATS_CLE_ERROR_19, /**< Classification failure 19. */
NSS_DTLS_CMN_STATS_CLE_ERROR_20, /**< Classification failure 20. */
NSS_DTLS_CMN_STATS_CLE_ERROR_21, /**< Classification failure 21. */
NSS_DTLS_CMN_STATS_CLE_ERROR_22, /**< Classification failure 22. */
NSS_DTLS_CMN_STATS_CLE_ERROR_23, /**< Classification failure 23. */
NSS_DTLS_CMN_STATS_CLE_ERROR_24, /**< Classification failure 24. */
NSS_DTLS_CMN_STATS_CLE_ERROR_25, /**< Classification failure 25. */
NSS_DTLS_CMN_STATS_CLE_ERROR_26, /**< Classification failure 26. */
NSS_DTLS_CMN_STATS_CLE_ERROR_27, /**< Classification failure 27. */
NSS_DTLS_CMN_STATS_CLE_ERROR_28, /**< Classification failure 28. */
NSS_DTLS_CMN_STATS_CLE_ERROR_29, /**< Classification failure 29. */
NSS_DTLS_CMN_STATS_CLE_ERROR_30, /**< Classification failure 30. */
NSS_DTLS_CMN_STATS_CLE_ERROR_31, /**< Classification failure 31. */
NSS_DTLS_CMN_STATS_SEQ_LOW, /**< Lower 32 bits of current transmit sequence number. */
NSS_DTLS_CMN_STATS_SEQ_HIGH, /**< Upper 16 bits of current transmit sequence number. */
NSS_DTLS_CMN_STATS_EPOCH, /**< Current epoch value. */
NSS_DTLS_CMN_CTX_STATS_MAX, /**< Maximum message type. */
};
/**
* nss_dtls_cmn_node_stats
* DTLS node statistics.
@@ -183,6 +262,16 @@ struct nss_dtls_cmn_ctx_config_dtls {
uint8_t res1; /**< Reserved for alignment. */
};
/**
* nss_dtls_cmn_stats_notification
* DTLS common transmission statistics structure.
*/
struct nss_dtls_cmn_stats_notification {
uint64_t stats_ctx[NSS_DTLS_CMN_CTX_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_dtls_cmn_msg
* Data for sending and receiving DTLS messages.
@@ -280,6 +369,20 @@ extern nss_tx_status_t nss_dtls_cmn_tx_msg_sync(struct nss_ctx_instance *nss_ctx
enum nss_dtls_cmn_msg_type type, uint16_t len,
struct nss_dtls_cmn_msg *ndcm, enum nss_dtls_cmn_error *resp);
/**
* nss_dtls_cmn_unregister_if
* Deregisters a DTLS session interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*
* @dependencies
* The DTLS session interface must have been previously registered.
*/
extern void nss_dtls_cmn_unregister_if(uint32_t if_num);
/**
* nss_dtls_cmn_register_if
* Registers a DTLS session interface with the NSS for sending and receiving
@@ -309,22 +412,19 @@ extern struct nss_ctx_instance *nss_dtls_cmn_register_if(uint32_t if_num,
void *app_ctx);
/**
* nss_dtls_cmn_unregister_if
* Deregisters a DTLS session interface from the NSS.
* nss_dtls_cmn_notify_unregister
* Deregisters an event callback.
*
* @param[in] if_num NSS interface number.
* @param[in] ifnum NSS interface number.
*
* @return
* None.
*
* @dependencies
* The DTLS session interface must have been previously registered.
*/
extern void nss_dtls_cmn_unregister_if(uint32_t if_num);
extern void nss_dtls_cmn_notify_unregister(uint32_t ifnum);
/**
* nss_dtls_cmn_notify_register
* Register an event callback to handle notification from DTLS firmware package.
* Registers an event callback to handle notification from DTLS firmware package.
*
* @param[in] ifnum NSS interface number.
* @param[in] ev_cb Callback for DTLS tunnel message.
@@ -336,17 +436,6 @@ extern void nss_dtls_cmn_unregister_if(uint32_t if_num);
extern struct nss_ctx_instance *nss_dtls_cmn_notify_register(uint32_t ifnum, nss_dtls_cmn_msg_callback_t ev_cb,
void *app_data);
/**
* nss_dtls_cmn_notify_unregister
* Unregister an event callback.
*
* @param[in] ifnum NSS interface number.
*
* @return
* None.
*/
extern void nss_dtls_cmn_notify_unregister(uint32_t ifnum);
/**
* nss_dtls_cmn_msg_init
* Initializes a DTLS message.
@@ -387,6 +476,34 @@ extern struct nss_ctx_instance *nss_dtls_cmn_get_context(void);
*/
extern int32_t nss_dtls_cmn_get_ifnum(int32_t if_num);
/**
* nss_dtls_cmn_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_dtls_cmn_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_dtls_cmn_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_dtls_cmn_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2021, 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.
@@ -40,10 +40,10 @@
enum nss_dynamic_interface_type {
NSS_DYNAMIC_INTERFACE_TYPE_NONE,
NSS_DYNAMIC_INTERFACE_TYPE_GRE_REDIR,
NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP,
NSS_DYNAMIC_INTERFACE_TYPE_RESERVED_5,
NSS_DYNAMIC_INTERFACE_TYPE_TUNIPIP6_INNER,
NSS_DYNAMIC_INTERFACE_TYPE_TUNIPIP6_OUTER,
NSS_DYNAMIC_INTERFACE_TYPE_WIFI,
NSS_DYNAMIC_INTERFACE_TYPE_RESERVED,
NSS_DYNAMIC_INTERFACE_TYPE_VAP,
NSS_DYNAMIC_INTERFACE_TYPE_RESERVED_0,
NSS_DYNAMIC_INTERFACE_TYPE_PPPOE,
@@ -105,6 +105,11 @@ enum nss_dynamic_interface_type {
NSS_DYNAMIC_INTERFACE_TYPE_TLS_OUTER,
NSS_DYNAMIC_INTERFACE_TYPE_MIRROR,
NSS_DYNAMIC_INTERFACE_TYPE_WIFI_EXT_VDEV_WDS,
NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_HOST_INNER,
NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_OUTER,
NSS_DYNAMIC_INTERFACE_TYPE_WIFI_EXT_VDEV_VLAN,
NSS_DYNAMIC_INTERFACE_TYPE_WIFI_MESH_INNER,
NSS_DYNAMIC_INTERFACE_TYPE_WIFI_MESH_OUTER,
NSS_DYNAMIC_INTERFACE_TYPE_MAX
};

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2021, 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.
@@ -84,6 +84,7 @@ enum nss_edma_stats_rx_t {
NSS_EDMA_STATS_RX_DESC,
NSS_EDMA_STATS_RX_QOS_ERR,
NSS_EDMA_STATS_RX_SRC_PORT_INVALID,
NSS_EDMA_STATS_RX_SRC_IF_INVALID,
NSS_EDMA_STATS_RX_MAX
};
@@ -143,6 +144,7 @@ struct nss_edma_rx_ring_stats {
uint32_t desc_cnt; /**< Number of descriptors processed. */
uint32_t qos_err; /**< Number of QoS errors. */
uint32_t rx_src_port_invalid; /**< Number of source port invalid errors. */
uint32_t rx_src_if_invalid; /**< Number of source interface invalid errors. */
};
/**

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
****************************************************************************
* Copyright (c) 2017-2019, 2021, 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.
@@ -11,7 +11,7 @@
* 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.
**************************************************************************
****************************************************************************
*/
/**
@@ -119,47 +119,49 @@ enum nss_gre_ip_types {
};
/**
* GRE Base debug statistics
* nss_gre_base_types
* GRE base debug statistics.
*/
enum nss_gre_base_debug_types {
GRE_BASE_RX_PACKETS, /**< Rx packet count. */
GRE_BASE_RX_DROPPED, /**< Number of packet dropped at Rx. */
GRE_BASE_EXP_ETH_HDR_MISSING, /**< Ethernet header missing. */
GRE_BASE_EXP_ETH_TYPE_NON_IP, /**< Packet is not IPV4 or IPV6. */
GRE_BASE_EXP_IP_UNKNOWN_PROTOCOL, /**< Packet protocol is unknown. */
GRE_BASE_EXP_IP_HEADER_INCOMPLETE, /**< Bad IP header. */
GRE_BASE_EXP_IP_BAD_TOTAL_LENGTH, /**< IP total lenghth is invalid. */
GRE_BASE_EXP_IP_BAD_CHECKSUM, /**< IP checksum is bad. */
GRE_BASE_EXP_IP_DATAGRAM_INCOMPLETE, /**< Bad packet. */
GRE_BASE_EXP_IP_FRAGMENT, /**< IP packet is a fragment. */
GRE_BASE_EXP_IP_OPTIONS_INCOMPLETE, /**< IP option is invalid. */
GRE_BASE_EXP_IP_WITH_OPTIONS, /**< IP packet with options. */
GRE_BASE_EXP_IPV6_UNKNOWN_PROTOCOL, /**< Protocol is unknown. */
GRE_BASE_EXP_IPV6_HEADER_INCOMPLETE, /**< Incomplete ipv6 header. */
GRE_BASE_EXP_GRE_UNKNOWN_SESSION, /**< Unknown GRE session. */
GRE_BASE_EXP_GRE_NODE_INACTIVE, /**< GRE node is inactive. */
GRE_BASE_DEBUG_MAX, /**< GRE base debug max. */
enum nss_gre_base_types {
NSS_GRE_BASE_RX_PACKETS, /**< Receive packet count. */
NSS_GRE_BASE_RX_DROPPED, /**< Number of packet dropped at receive. */
NSS_GRE_BASE_EXP_ETH_HDR_MISSING, /**< Ethernet header missing. */
NSS_GRE_BASE_EXP_ETH_TYPE_NON_IP, /**< Packet is not IPV4 or IPV6. */
NSS_GRE_BASE_EXP_IP_UNKNOWN_PROTOCOL, /**< Packet protocol is unknown. */
NSS_GRE_BASE_EXP_IP_HEADER_INCOMPLETE, /**< Bad IP header. */
NSS_GRE_BASE_EXP_IP_BAD_TOTAL_LENGTH, /**< IP total length is invalid. */
NSS_GRE_BASE_EXP_IP_BAD_CHECKSUM, /**< IP checksum is bad. */
NSS_GRE_BASE_EXP_IP_DATAGRAM_INCOMPLETE,/**< Bad packet. */
NSS_GRE_BASE_EXP_IP_FRAGMENT, /**< IP packet is a fragment. */
NSS_GRE_BASE_EXP_IP_OPTIONS_INCOMPLETE, /**< IP option is invalid. */
NSS_GRE_BASE_EXP_IP_WITH_OPTIONS, /**< IP packet with options. */
NSS_GRE_BASE_EXP_IPV6_UNKNOWN_PROTOCOL, /**< Protocol is unknown. */
NSS_GRE_BASE_EXP_IPV6_HEADER_INCOMPLETE,/**< Incomplete ipv6 header. */
NSS_GRE_BASE_EXP_GRE_UNKNOWN_SESSION, /**< Unknown GRE session. */
NSS_GRE_BASE_EXP_GRE_NODE_INACTIVE, /**< GRE node is inactive. */
NSS_GRE_BASE_DEBUG_MAX, /**< GRE base debug maximum. */
};
/*
* GRE session Packet drop and exception events.
/**
* nss_gre_session_types
* GRE session packet drop and exception events.
*/
enum gre_session_debug_types {
GRE_SESSION_PBUF_ALLOC_FAIL, /**< Pbuf allocation failure. */
GRE_SESSION_DECAP_FORWARD_ENQUEUE_FAIL, /**< Rx forward enqueue failure. */
GRE_SESSION_ENCAP_FORWARD_ENQUEUE_FAIL, /**< Tx forward enqueue failure. */
GRE_SESSION_DECAP_TX_FORWARDED, /**< Number of packets forwarded after decap. */
GRE_SESSION_ENCAP_RX_RECEIVED, /**< Number of packets received for encap. */
GRE_SESSION_ENCAP_RX_DROPPED, /**< Packets dropped while enqueuing for encap. */
GRE_SESSION_ENCAP_RX_LINEAR_FAIL, /**< Packets dropped during encap linearization. */
GRE_SESSION_EXP_RX_KEY_ERROR, /**< Rx KEY error. */
GRE_SESSION_EXP_RX_SEQ_ERROR, /**< Rx Sequence number error. */
GRE_SESSION_EXP_RX_CS_ERROR, /**< Rx checksum error */
GRE_SESSION_EXP_RX_FLAG_MISMATCH, /**< Rx flag mismatch. */
GRE_SESSION_EXP_RX_MALFORMED, /**< Rx packet is malformed. */
GRE_SESSION_EXP_RX_INVALID_PROTOCOL, /**< Rx packet protocol is invalid. */
GRE_SESSION_EXP_RX_NO_HEADROOM, /**< Packet does not have enough headroom. */
GRE_SESSION_DEBUG_MAX, /**< Session debug max. */
enum nss_gre_session_types {
NSS_GRE_SESSION_PBUF_ALLOC_FAIL, /**< Pbuf allocation failure. */
NSS_GRE_SESSION_DECAP_FORWARD_ENQUEUE_FAIL, /**< Receive forward enqueue failure. */
NSS_GRE_SESSION_ENCAP_FORWARD_ENQUEUE_FAIL, /**< Transmit forward enqueue failure. */
NSS_GRE_SESSION_DECAP_TX_FORWARDED, /**< Number of packets forwarded after decapsulation. */
NSS_GRE_SESSION_ENCAP_RX_RECEIVED, /**< Number of packets received for encapsulation. */
NSS_GRE_SESSION_ENCAP_RX_DROPPED, /**< Packets dropped while enqueuing for encapsulation. */
NSS_GRE_SESSION_ENCAP_RX_LINEAR_FAIL, /**< Packets dropped during encapsulation linearization. */
NSS_GRE_SESSION_EXP_RX_KEY_ERROR, /**< Receive key error. */
NSS_GRE_SESSION_EXP_RX_SEQ_ERROR, /**< Receive Sequence number error. */
NSS_GRE_SESSION_EXP_RX_CS_ERROR, /**< Receive checksum error */
NSS_GRE_SESSION_EXP_RX_FLAG_MISMATCH, /**< Receive flag mismatch. */
NSS_GRE_SESSION_EXP_RX_MALFORMED, /**< Receive packet is malformed. */
NSS_GRE_SESSION_EXP_RX_INVALID_PROTOCOL, /**< Receive packet protocol is invalid. */
NSS_GRE_SESSION_EXP_RX_NO_HEADROOM, /**< Packet does not have enough headroom. */
NSS_GRE_SESSION_DEBUG_MAX, /**< Session debug maximum. */
};
/**
@@ -207,15 +209,34 @@ struct nss_gre_deconfig_msg {
* GRE session statistics message
*/
struct nss_gre_session_stats_msg {
struct nss_cmn_node_stats node_stats; /**< Common node statistics. */
uint32_t stats[GRE_SESSION_DEBUG_MAX]; /**< Session debug statistics. */
struct nss_cmn_node_stats node_stats; /**< Common node statistics. */
uint32_t stats[NSS_GRE_SESSION_DEBUG_MAX]; /**< Session debug statistics. */
};
/**
* GRE base statistics message
*/
struct nss_gre_base_stats_msg {
uint32_t stats[GRE_BASE_DEBUG_MAX]; /**< Base debug statistics. */
uint32_t stats[NSS_GRE_BASE_DEBUG_MAX]; /**< Base debug statistics. */
};
/**
* nss_gre_base_stats_notification
* GRE transmission statistics structure.
*/
struct nss_gre_base_stats_notification {
uint64_t stats_base_ctx[NSS_GRE_BASE_DEBUG_MAX]; /**< Base debug transmission statistics. */
uint32_t core_id; /**< Core ID. */
};
/**
* nss_gre_session_stats_notification
* GRE transmission statistics structure.
*/
struct nss_gre_session_stats_notification {
uint64_t stats_session_ctx[NSS_GRE_SESSION_DEBUG_MAX]; /**< Session debug transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
@@ -438,6 +459,34 @@ extern void nss_gre_register_pkt_callback(nss_gre_pkt_callback_t cb);
*/
extern void nss_gre_unregister_pkt_callback(void);
/**
* nss_gre_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2015, 2017-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2015, 2017-2021, 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.
@@ -92,6 +92,60 @@ enum nss_gre_redir_tunnel_types {
NSS_GRE_REDIR_TUNNEL_TYPE_MAX, /**< Maximum tunnel type. */
};
/**
* nss_gre_redir_stats_types
* GRE redirect statistics types.
*/
enum nss_gre_redir_stats_types {
NSS_GRE_REDIR_STATS_TX_DROPS = NSS_STATS_NODE_MAX,
/**< Dropped transmit packets. */
NSS_GRE_REDIR_STATS_SJACK_RX_PKTS, /**< SJACK receive packet counter. */
NSS_GRE_REDIR_STATS_SJACK_TX_PKTS, /**< SJACK transmit packet counter. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_0, /**< Offload receive packet counter 0. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_1, /**< Offload receive packet counter 1. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_2, /**< Offload receive packet counter 2. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_3, /**< Offload receive packet counter 3. */
NSS_GRE_REDIR_STATS_OFFLOAD_RX_PKTS_4, /**< Offload receive packet counter 4. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_0, /**< Offload transmit packet counter 0. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_1, /**< Offload transmit packet counter 1. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_2, /**< Offload transmit packet counter 2. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_3, /**< Offload transmit packet counter 3. */
NSS_GRE_REDIR_STATS_OFFLOAD_TX_PKTS_4, /**< Offload transmit packet counter 4. */
NSS_GRE_REDIR_STATS_EXCEPTION_US_RX_PKTS,
/**< Upstream exception receive packet counter. */
NSS_GRE_REDIR_STATS_EXCEPTION_US_TX_PKTS,
/**< Upstream exception transmit packet counter. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_RX_PKTS,
/**< Downstream exception receive packet counter. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_TX_PKTS,
/**< Downstream exception transmit packet counter. */
NSS_GRE_REDIR_STATS_ENCAP_SG_ALLOC_DROP,
/**< Encapsulation drop counters due to scatter gather buffer allocation failure. */
NSS_GRE_REDIR_STATS_DECAP_FAIL_DROP,
/**< Decapsulation drop counters due to invalid IP header. */
NSS_GRE_REDIR_STATS_DECAP_SPLIT_DROP,
/**< Decapsulation drop counters due to split flow processing. */
NSS_GRE_REDIR_STATS_SPLIT_SG_ALLOC_FAIL,
/**< Split processing fail counter due to scatter gather buffer allocation failure. */
NSS_GRE_REDIR_STATS_SPLIT_LINEAR_COPY_FAIL,
/**< Split processing fail counter due to linear copy fail. */
NSS_GRE_REDIR_STATS_SPLIT_NOT_ENOUGH_TAILROOM,
/**< Split processing fail counter due to insufficient tailroom. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_INVALID_DST_DROP,
/**< Downstream exception handling fail counter due to invalid destination. */
NSS_GRE_REDIR_STATS_DECAP_EAPOL_FRAMES,
/**< Decapsulation EAPoL frame counters. */
NSS_GRE_REDIR_STATS_EXCEPTION_DS_INV_APPID,
/**< Invalid application ID for the transmit completion packets on exception downstream node. */
NSS_GRE_REDIR_STATS_HEADROOM_UNAVAILABLE,
/**< Packet headroom unavailable to write metadata. */
NSS_GRE_REDIR_STATS_TX_COMPLETION_SUCCESS,
/**< Host enqueue success count for the transmit completion packets. */
NSS_GRE_REDIR_STATS_TX_COMPLETION_DROP,
/**< Host enqueue drop count for the transmit completion packets. */
NSS_GRE_REDIR_STATS_MAX /**< Maximum statistics type. */
};
/**
* nss_gre_redir_inner_configure_msg
* Message information for configuring GRE inner node.
@@ -246,35 +300,64 @@ struct nss_gre_redir_stats_sync_msg {
uint32_t tx_completion_drop; /**< Host enqueue drop count for the Tx completion packets. */
};
/**
* nss_gre_redir_tun_stats
* GRE redirect statistics to accumulate all the stats values.
*/
struct nss_gre_redir_tun_stats {
uint64_t rx_packets; /**< Number of packets received. */
uint64_t rx_bytes; /**< Number of bytes received. */
uint64_t tx_packets; /**< Number of packets transmitted. */
uint64_t tx_bytes; /**< Number of bytes transmitted. */
uint64_t rx_dropped[NSS_MAX_NUM_PRI];
/**< Packets dropped on receive due to queue full. */
uint64_t tx_dropped; /**< Dropped transmit packets. */
uint64_t sjack_rx_packets; /**< SJACK receive packet counter. */
uint64_t sjack_tx_packets; /**< SJACK transmit packet counter. */
uint64_t offl_rx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload receive packet counter per radio. */
uint64_t offl_tx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload transmit packet counter per radio. */
uint64_t exception_us_rx; /**< Upstream exception receive packet counter. */
uint64_t exception_us_tx; /**< Upstream exception transmit packet counter. */
uint64_t exception_ds_rx; /**< Downstream exception receive packet counter. */
uint64_t exception_ds_tx; /**< Downstream exception transmit packet counter. */
uint64_t encap_sg_alloc_drop;
/**< Encapsulation drop counters due to scatter gather buffer allocation failure. */
uint64_t decap_fail_drop; /**< Decapsulation drop counters due to invalid IP header. */
uint64_t decap_split_drop; /**< Decapsulation drop counters due to split flow processing. */
uint64_t split_sg_alloc_fail;
/**< Split processing fail counter due to scatter gather buffer allocation failure. */
uint64_t split_linear_copy_fail;
/**< Split processing fail counter due to linear copy fail. */
uint64_t split_not_enough_tailroom;
/**< Split processing fail counter due to insufficient tailroom. */
uint64_t exception_ds_invalid_dst_drop;
/**< Downstream exception handling fail counter due to invalid destination. */
uint64_t decap_eapol_frames; /**< Decapsulation EAPoL frame counters. */
uint64_t exception_ds_inv_appid;
/**< Invalid application ID for the transmit completion packets on exception downstream node. */
uint64_t headroom_unavail; /**< Packet headroom unavailable to write metadata. */
uint64_t tx_completion_success; /**< Host enqueue success count for the transmit completion packets. */
uint64_t tx_completion_drop; /**< Host enqueue drop count for the transmit completion packets. */
};
/**
* nss_gre_redir_tunnel_stats
* GRE redirect statistics as seen by the HLOS.
*/
struct nss_gre_redir_tunnel_stats {
struct net_device *dev; /**< Net device. */
struct nss_cmn_node_stats node_stats; /**< Common node statistics. */
uint64_t tx_dropped; /**< Dropped Tx packets. */
uint64_t sjack_rx_packets; /**< SJACK Rx packet counter. */
uint64_t sjack_tx_packets; /**< SJACK Tx packet counter. */
uint64_t offl_rx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload Rx packet counter per radio. */
uint64_t offl_tx_pkts[NSS_GRE_REDIR_MAX_RADIO]; /**< Offload Tx packet counter per radio. */
uint64_t exception_us_rx; /**< Upstream exception Rx packet counter. */
uint64_t exception_us_tx; /**< Upstream exception Tx packet counter. */
uint64_t exception_ds_rx; /**< Downstream exception Rx packet counter. */
uint64_t exception_ds_tx; /**< Downstream exception Tx packet counter. */
uint64_t encap_sg_alloc_drop; /**< Encapsulation drop counters due to scatter gather buffer allocation failure. */
uint64_t decap_fail_drop; /**< Decapsulation drop counters due to invalid IP header. */
uint64_t decap_split_drop; /**< Decapsulation drop counters due to split flow processing. */
uint64_t split_sg_alloc_fail; /**< Split processing fail counter due to scatter gather buffer allocation failure. */
uint64_t split_linear_copy_fail; /**< Split processing fail counter due to linear copy fail. */
uint64_t split_not_enough_tailroom; /**< Split processing fail counter due to insufficient tailroom. */
uint64_t exception_ds_invalid_dst_drop; /**< Downstream exception handling fail counter due to invalid destination. */
uint64_t decap_eapol_frames; /**< Decapsulation EAPoL frame counters. */
uint64_t exception_ds_inv_appid; /**< Invalid application ID for the Tx completion packets on exception downstream node. */
uint64_t headroom_unavail; /**< Packet headroom unavailable to write metadata. */
uint64_t tx_completion_success; /**< Host enqueue success count for the Tx completion packets. */
uint64_t tx_completion_drop; /**< Host enqueue drop count for the Tx completion packets. */
uint32_t ref_count; /**< Reference count for statistics. */
struct net_device *dev; /**< Net device. */
struct nss_gre_redir_tun_stats tstats; /**< Structure to accumulate all the statistics. */
uint32_t ref_count; /**< Reference count for statistics. */
};
/**
* nss_gre_redir_stats_notification
* GRE redirect transmission statistics structure.
*/
struct nss_gre_redir_stats_notification {
struct nss_gre_redir_tunnel_stats stats_ctx; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
@@ -466,7 +549,7 @@ extern nss_tx_status_t nss_gre_redir_tx_buf_noreuse(struct nss_ctx_instance *nss
uint32_t if_num);
/**
* nss_gre_redir_get_stats
* nss_gre_redir_stats_get
* Gets GRE redirect tunnel statistics.
*
* @datatypes
@@ -478,7 +561,7 @@ extern nss_tx_status_t nss_gre_redir_tx_buf_noreuse(struct nss_ctx_instance *nss
* @return
* TRUE or FALSE.
*/
extern bool nss_gre_redir_get_stats(int index, struct nss_gre_redir_tunnel_stats *stats);
extern bool nss_gre_redir_stats_get(int index, struct nss_gre_redir_tunnel_stats *stats);
/**
* nss_gre_redir_alloc_and_register_node
@@ -594,6 +677,34 @@ extern struct dentry *nss_gre_redir_get_dentry(void);
*/
extern struct device *nss_gre_redir_get_device(void);
/**
* nss_gre_redir_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_redir_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2018, The Linux Foundation. All rights reserved.
* Copyright (c) 2018, 2021, 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.
@@ -72,6 +72,39 @@ enum nss_gre_redir_lag_ds_message_types {
NSS_GRE_REDIR_LAG_DS_MAX_MSG_TYPES,
};
/**
* nss_gre_redir_lag_ds_stats_types
* GRE redirect LAG downstream statistics.
*/
enum nss_gre_redir_lag_ds_stats_types {
NSS_GRE_REDIR_LAG_DS_STATS_DST_INVALID = NSS_STATS_NODE_MAX,
/**< Packets that do not have a valid destination. */
NSS_GRE_REDIR_LAG_DS_STATS_EXCEPTION_PKT, /**< Packets that are exceptioned to host. */
NSS_GRE_REDIR_LAG_DS_STATS_MAX, /**< Maximum statistics type. */
};
/**
* nss_gre_redir_lag_us_stats_types
* GRE redirect LAG upstream statistics.
*/
enum nss_gre_redir_lag_us_stats_types {
NSS_GRE_REDIR_LAG_US_STATS_AMSDU_PKTS = NSS_STATS_NODE_MAX,
/**< Number of AMSDU packets seen. */
NSS_GRE_REDIR_LAG_US_STATS_AMSDU_PKTS_ENQUEUED, /**< Number of AMSDU packets enqueued. */
NSS_GRE_REDIR_LAG_US_STATS_AMSDU_PKTS_EXCEPTIONED,
/**< Number of AMSDU packets exceptioned. */
NSS_GRE_REDIR_LAG_US_STATS_EXCEPTIONED, /**< Number of exceptioned packets. */
NSS_GRE_REDIR_LAG_US_STATS_FREED, /**< Freed packets when equeue to NSS to host fails. */
NSS_GRE_REDIR_LAG_US_STATS_ADD_ATTEMPT, /**< Add hash attempts. */
NSS_GRE_REDIR_LAG_US_STATS_ADD_SUCCESS, /**< Add hash success. */
NSS_GRE_REDIR_LAG_US_STATS_ADD_FAIL_TABLE_FULL, /**< Add hash failed due to full table. */
NSS_GRE_REDIR_LAG_US_STATS_ADD_FAIL_EXISTS, /**< Add hash failed as entry already exists. */
NSS_GRE_REDIR_LAG_US_STATS_DEL_ATTEMPT, /**< Delete hash attempts. */
NSS_GRE_REDIR_LAG_US_STATS_DEL_SUCCESS, /**< Delete hash success. */
NSS_GRE_REDIR_LAG_US_STATS_DEL_FAIL_NOT_FOUND, /**< Delete hash failed as entry not found in hash table. */
NSS_GRE_REDIR_LAG_US_STATS_MAX, /**< Maximum statistics type. */
};
/**
* nss_gre_redir_lag_us_hash_mode
* GRE redirect LAG upstream hash modes.
@@ -253,6 +286,16 @@ struct nss_gre_redir_lag_us_tunnel_stats {
struct nss_gre_redir_lag_us_cmn_db_stats db_stats; /**< Common hash statistics. */
};
/**
* nss_gre_redir_lag_us_stats_notification
* GRE redirect LAG upstream transmission statistics structure.
*/
struct nss_gre_redir_lag_us_stats_notification {
struct nss_gre_redir_lag_us_tunnel_stats stats_ctx; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_gre_redir_lag_ds_add_sta_msg
* Message to add station in LAG deployment.
@@ -320,15 +363,26 @@ struct nss_gre_redir_lag_ds_msg {
* Downstream statistics.
*/
struct nss_gre_redir_lag_ds_tun_stats {
uint64_t rx_packets; /**< Received packets. */
uint64_t rx_bytes; /**< Received bytes. */
uint64_t tx_packets; /**< Transmit packets. */
uint64_t tx_bytes; /**< Transmit bytes. */
uint64_t rx_dropped[NSS_MAX_NUM_PRI]; /**< Packets dropped on receive due to queue full. */
uint64_t dst_invalid; /**< Packets that do not have a valid destination. */
uint64_t exception_cnt; /**< Packets that are exceptioned to host. */
uint32_t ifnum; /**< NSS interface number. */
bool valid; /**< Valid flag. */
uint64_t rx_packets; /**< Received packets. */
uint64_t rx_bytes; /**< Received bytes. */
uint64_t tx_packets; /**< Transmit packets. */
uint64_t tx_bytes; /**< Transmit bytes. */
uint64_t rx_dropped[NSS_MAX_NUM_PRI];
/**< Packets dropped on receive due to queue full. */
uint64_t dst_invalid; /**< Packets that do not have a valid destination. */
uint64_t exception_cnt; /**< Packets that are exceptioned to host. */
uint32_t ifnum; /**< NSS interface number. */
bool valid; /**< Valid flag. */
};
/**
* nss_gre_redir_lag_ds_stats_notification
* GRE redirect LAG downstream transmission statistics structure.
*/
struct nss_gre_redir_lag_ds_stats_notification {
struct nss_gre_redir_lag_ds_tun_stats stats_ctx; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
@@ -568,7 +622,7 @@ extern nss_tx_status_t nss_gre_redir_lag_us_tx_msg_sync(struct nss_ctx_instance
extern nss_tx_status_t nss_gre_redir_lag_ds_tx_msg_sync(struct nss_ctx_instance *nss_ctx, struct nss_gre_redir_lag_ds_msg *ngrm);
/**
* nss_gre_redir_lag_us_get_cmn_stats
* nss_gre_redir_lag_us_stats_get
* Fetches common node statistics for upstream GRE Redir LAG.
*
* @datatypes
@@ -580,10 +634,10 @@ extern nss_tx_status_t nss_gre_redir_lag_ds_tx_msg_sync(struct nss_ctx_instance
* @return
* True if successful, else false.
*/
extern bool nss_gre_redir_lag_us_get_cmn_stats(struct nss_gre_redir_lag_us_tunnel_stats *cmn_stats, uint32_t index);
extern bool nss_gre_redir_lag_us_stats_get(struct nss_gre_redir_lag_us_tunnel_stats *cmn_stats, uint32_t index);
/**
* nss_gre_redir_lag_ds_get_stats
* nss_gre_redir_lag_ds_stats_get
* Fetches common node statistics for downstream GRE Redir LAG.
*
* @datatypes
@@ -595,7 +649,7 @@ extern bool nss_gre_redir_lag_us_get_cmn_stats(struct nss_gre_redir_lag_us_tunne
* @return
* True if successful, else false.
*/
extern bool nss_gre_redir_lag_ds_get_cmn_stats(struct nss_gre_redir_lag_ds_tun_stats *cmn_stats, uint32_t index);
extern bool nss_gre_redir_lag_ds_stats_get(struct nss_gre_redir_lag_ds_tun_stats *cmn_stats, uint32_t index);
/**
* nss_gre_redir_lag_us_get_context
@@ -615,6 +669,62 @@ extern struct nss_ctx_instance *nss_gre_redir_lag_us_get_context(void);
*/
extern struct nss_ctx_instance *nss_gre_redir_lag_ds_get_context(void);
/**
* nss_gre_redir_lag_ds_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_lag_ds_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_redir_lag_ds_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_lag_ds_stats_register_notifier(struct notifier_block *nb);
/**
* nss_gre_redir_lag_us_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_lag_us_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_redir_lag_us_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_lag_us_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2019, 2021, 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.
@@ -25,6 +25,8 @@
#define NSS_GRE_REDIR_MARK_HLOS_MAGIC 0xaade /**< Metadata magic set by HLOS. */
#define NSS_GRE_REDIR_MARK_NSS_MAGIC 0xaadf /**< Metadata magic set by NSS. */
extern struct nss_gre_redir_mark_stats gre_mark_stats;
/**
* nss_gre_redir_mark messages
* Message types for GRE redirect mark requests and responses.
@@ -46,6 +48,23 @@ enum nss_gre_redir_mark_error_types {
NSS_GRE_REDIR_MARK_ERROR_TYPE_MAX
};
/**
* nss_gre_redir_mark_stats_types
* GRE redirect mark statistics types.
*/
enum nss_gre_redir_mark_stats_types {
NSS_GRE_REDIR_MARK_STATS_HLOS_MAGIC_FAILED = NSS_STATS_NODE_MAX,
/**< HLOS magic fail count. */
NSS_GRE_REDIR_MARK_STATS_INV_DST_IF_DROPS, /**< Invalid transmit interface drop count. */
NSS_GRE_REDIR_MARK_STATS_DST_IF_ENQUEUE, /**< Next egress interface enqueue success count. */
NSS_GRE_REDIR_MARK_STATS_DST_IF_ENQUEUE_DROPS, /**< Next egress interface enqueue drop count. */
NSS_GRE_REDIR_MARK_STATS_INV_APPID, /**< Invalid application ID for the transmit completion packets. */
NSS_GRE_REDIR_MARK_STATS_HEADROOM_UNAVAILABLE, /**< Packet headroom unavailable to write metadata. */
NSS_GRE_REDIR_MARK_STATS_TX_COMPLETION_SUCCESS, /**< Transmit completion host enqueue success count. */
NSS_GRE_REDIR_MARK_STATS_TX_COMPLETION_DROPS, /**< Transmit completion host enqueue drop count. */
NSS_GRE_REDIR_MARK_STATS_MAX /**< Maximum statistics type. */
};
/**
* nss_gre_redir_mark_metadata
* HLOS to NSS per packet downstream metadata.
@@ -55,7 +74,7 @@ struct nss_gre_redir_mark_metadata {
uint8_t wifi_tid; /**< TID value. */
uint8_t app_id; /**< Application ID. */
uint16_t hw_hash_idx; /**< Hardware AST hash index value. */
uint32_t tx_status; /**< Tx status. */
uint32_t tx_status; /**< Transmit status. */
uint16_t offset; /**< Buffer offset from the metadata. */
uint16_t magic; /**< Metadata magic. */
};
@@ -67,21 +86,31 @@ struct nss_gre_redir_mark_metadata {
struct nss_gre_redir_mark_stats_sync_msg {
struct nss_cmn_node_stats node_stats; /**< Common node statistics. */
uint32_t hlos_magic_fail; /**< HLOS magic fail count. */
uint32_t invalid_dst_drop; /**< Invalid Tx interface drop count. */
uint32_t invalid_dst_drop; /**< Invalid transmit interface drop count. */
uint32_t dst_enqueue_success; /**< Next egress interface enqueue success count. */
uint32_t dst_enqueue_drop; /**< Next egress interface enqueue drop count. */
uint32_t inv_appid; /**< Invalid application ID for the Tx completion packets. */
uint32_t inv_appid; /**< Invalid application ID for the transmit completion packets. */
uint32_t headroom_unavail; /**< Packet headroom unavailable to write metadata. */
uint32_t tx_completion_success; /**< Tx completion host enqueue success count. */
uint32_t tx_completion_drop; /**< Tx completion host enqueue drop count. */
uint32_t tx_completion_success; /**< Transmit completion host enqueue success count. */
uint32_t tx_completion_drop; /**< Transmit completion host enqueue drop count. */
};
/**
* nss_gre_redir_mark_register_cb_msg
* Tx completion function register configuration message.
* Transmit completion function register configuration message.
*/
struct nss_gre_redir_mark_register_cb_msg {
uint32_t nss_if_num; /**< NSS Tx interface number on which callback needs to be registered. */
uint32_t nss_if_num; /**< NSS transmit interface number on which callback needs to be registered. */
};
/**
* nss_gre_redir_mark_stats_notification
* GRE redirect mark transmission statistics structure.
*/
struct nss_gre_redir_mark_stats_notification {
uint64_t stats_ctx[NSS_GRE_REDIR_MARK_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
@@ -211,7 +240,7 @@ extern nss_tx_status_t nss_gre_redir_mark_tx_msg(struct nss_ctx_instance *nss_ct
extern nss_tx_status_t nss_gre_redir_mark_tx_msg_sync(struct nss_ctx_instance *nss_ctx, struct nss_gre_redir_mark_msg *ngrm);
/**
* nss_gre_redir_mark_get_stats
* nss_gre_redir_mark_stats_get
* Gets GRE redirect mark statistics.
*
* @datatypes
@@ -223,7 +252,7 @@ extern nss_tx_status_t nss_gre_redir_mark_tx_msg_sync(struct nss_ctx_instance *n
* @return
* TRUE or FALSE.
*/
extern bool nss_gre_redir_mark_get_stats(void *stats);
extern bool nss_gre_redir_mark_stats_get(struct nss_gre_redir_mark_stats *stats);
/**
* nss_gre_redir_alloc_and_register_node
@@ -274,6 +303,34 @@ extern struct dentry *nss_gre_redir_mark_get_dentry(void);
*/
extern struct device *nss_gre_redir_mark_get_device(void);
/**
* nss_gre_redir_mark_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_mark_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_redir_mark_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_redir_mark_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2016-2018,2020, The Linux Foundation. All rights reserved.
****************************************************************************
* Copyright (c) 2016-2018, 2020-2021, 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.
@@ -11,7 +11,7 @@
* 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.
**************************************************************************
****************************************************************************
*/
/**
@@ -97,6 +97,41 @@ enum nss_gre_tunnel_error_types {
NSS_GRE_TUNNEL_ERR_MAX,
};
/**
* nss_gre_tunnel_stats_type
* GRE tunnel session debug statistic counters.
*/
enum nss_gre_tunnel_stats_type {
NSS_GRE_TUNNEL_STATS_SESSION_RX_PKTS, /**< Number of packets received. */
NSS_GRE_TUNNEL_STATS_SESSION_TX_PKTS, /**< Number of packets transmitted. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_QUEUE_0_DROPPED, /**< Dropped receive packets 0. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_QUEUE_1_DROPPED, /**< Dropped receive packets 1. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_QUEUE_2_DROPPED, /**< Dropped receive packets 2. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_QUEUE_3_DROPPED, /**< Dropped receive packets 3. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_MALFORMED, /**< Malformed packet was received. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_INVALID_PROT, /**< Invalid protocol was received. */
NSS_GRE_TUNNEL_STATS_SESSION_DECAP_QUEUE_FULL, /**< Decapsulation queue is full. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_SINGLE_REC_DGRAM, /**< Single fragment was received. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_INVALID_REC_DGRAM, /**< Invalid fragment was received. */
NSS_GRE_TUNNEL_STATS_SESSION_BUFFER_ALLOC_FAIL, /**< Buffer memory allocation failed. */
NSS_GRE_TUNNEL_STATS_SESSION_BUFFER_COPY_FAIL, /**< Buffer memory copy failed. */
NSS_GRE_TUNNEL_STATS_SESSION_OUTFLOW_QUEUE_FULL, /**< Outflow queue is full. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_DROPPED_HROOM, /**< Packets dropped because of insufficent headroom. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_CBUFFER_ALLOC_FAIL, /**< Receive crypto buffer allocation failed. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_CENQUEUE_FAIL, /**< Receive enqueue-to-crypto failed. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_DECRYPT_DONE, /**< Receive decryption is complete. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_FORWARD_ENQUEUE_FAIL, /**< Receive forward enqueue failed. */
NSS_GRE_TUNNEL_STATS_SESSION_TX_CBUFFER_ALLOC_FAIL, /**< Receive crypto buffer allocation failed. */
NSS_GRE_TUNNEL_STATS_SESSION_TX_CENQUEUE_FAIL, /**< Transmit enqueue-to-crypto failed. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_DROPPED_TROOM, /**< Packets dropped because of insufficent tailroom. */
NSS_GRE_TUNNEL_STATS_SESSION_TX_FORWARD_ENQUEUE_FAIL, /**< Transmit forward enqueue failed. */
NSS_GRE_TUNNEL_STATS_SESSION_TX_CIPHER_DONE, /**< Transmit cipher is complete. */
NSS_GRE_TUNNEL_STATS_SESSION_CRYPTO_NOSUPP, /**< Error count for non-supported crypto packets. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_DROPPED_MH_VERSION, /**< Receive drop: bad meta header. */
NSS_GRE_TUNNEL_STATS_SESSION_RX_UNALIGNED_PKT, /**< Counter for unaligned packets. */
NSS_GRE_TUNNEL_STATS_SESSION_MAX, /**< Maximum statistics type. */
};
/**
* nss_gre_tunnel_di_to_wlan_id
* Dynamic interface to WLAN ID message structure.
@@ -151,20 +186,20 @@ struct nss_gre_tunnel_stats {
uint32_t rx_dropped_hroom;
/**< Packets dropped because of insufficent headroom. */
uint32_t rx_cbuf_alloc_fail;
/**< Rx crypto buffer allocation failed. */
uint32_t rx_cenqueue_fail; /**< Rx enqueue-to-crypto failed. */
uint32_t rx_decrypt_done; /**< Rx decryption is complete. */
uint32_t rx_forward_enqueue_fail; /**< Rx forward enqueue failed. */
/**< Receive crypto buffer allocation failed. */
uint32_t rx_cenqueue_fail; /**< Receive enqueue-to-crypto failed. */
uint32_t rx_decrypt_done; /**< Receive decryption is complete. */
uint32_t rx_forward_enqueue_fail; /**< Receive forward enqueue failed. */
uint32_t tx_cbuf_alloc_fail;
/**< Rx crypto buffer allocation failed. */
uint32_t tx_cenqueue_fail; /**< Tx enqueue-to-crypto failed. */
/**< Receive crypto buffer allocation failed. */
uint32_t tx_cenqueue_fail; /**< Transmit enqueue-to-crypto failed. */
uint32_t rx_dropped_troom;
/**< Packets dropped because of insufficent tailroom. */
uint32_t tx_forward_enqueue_fail; /**< Tx forward enqueue failed. */
uint32_t tx_cipher_done; /**< Tx cipher is complete. */
uint32_t tx_forward_enqueue_fail; /**< Transmit forward enqueue failed. */
uint32_t tx_cipher_done; /**< Transmit cipher is complete. */
uint32_t crypto_nosupp;
/**< Error count for non-supported crypto packets. */
uint32_t rx_dropped_mh_ver; /**< Rx drop: bad meta header. */
uint32_t rx_dropped_mh_ver; /**< Receive drop: bad meta header. */
uint32_t rx_unaligned_pkt; /**< Counter for unaligned packets. */
#if defined(NSS_HAL_IPQ807x_SUPPORT)
uint32_t crypto_resp_error[NSS_CRYPTO_CMN_RESP_ERROR_MAX];
@@ -172,6 +207,17 @@ struct nss_gre_tunnel_stats {
#endif
};
/**
* nss_gre_tunnel_stats_notification
* GRE tunnel transmission statistics structure.
*/
struct nss_gre_tunnel_stats_notification {
uint64_t stats_ctx[NSS_GRE_TUNNEL_STATS_SESSION_MAX + NSS_CRYPTO_CMN_RESP_ERROR_MAX];
/**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_gre_tunnel_msg
* Data for sending and receiving GRE tunnel messages.
@@ -347,6 +393,34 @@ extern nss_tx_status_t nss_gre_tunnel_inquiry(
struct nss_gre_tunnel_configure *inquiry_info,
nss_gre_tunnel_msg_callback_t cb, void *app_data);
/**
* nss_gre_tunnel_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_tunnel_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_gre_tunnel_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_gre_tunnel_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2021, 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.
@@ -53,6 +53,8 @@ enum nss_if_message_types {
NSS_IF_SET_IGS_NODE,
NSS_IF_CLEAR_IGS_NODE,
NSS_IF_RESET_NEXTHOP,
NSS_IF_PPE_PORT_CREATE,
NSS_IF_PPE_PORT_DESTROY,
NSS_IF_MAX_MSG_TYPES = 9999,
};
@@ -197,6 +199,14 @@ struct nss_if_igs_config {
int32_t igs_num; /**< Ingress shaper interface number. */
};
/**
* nss_if_ppe_port_create
* Message to create PPE port.
*/
struct nss_if_ppe_port_create {
int32_t ppe_port_num; /**< PPE port number returned by NSS. */
};
/**
* nss_if_msgs
* Information for physical NSS interface command messages.
@@ -230,6 +240,8 @@ union nss_if_msgs {
/**< Set nexthop of interface. */
struct nss_if_igs_config config_igs;
/**< Configure an ingress shaper interface. */
struct nss_if_ppe_port_create ppe_port_create;
/**< Create a PPE port. */
};
/**
@@ -371,6 +383,70 @@ nss_tx_status_t nss_if_set_nexthop(struct nss_ctx_instance *nss_ctx, uint32_t if
*/
nss_tx_status_t nss_if_reset_nexthop(struct nss_ctx_instance *nss_ctx, uint32_t if_num);
/**
* nss_if_change_mtu
* Change the MTU of the interface.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] if_num NSS interface number.
* @param[in] mtu New MTU.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_if_change_mtu(struct nss_ctx_instance *nss_ctx, nss_if_num_t if_num, uint16_t mtu);
/**
* nss_if_change_mac_addr
* Change the MAC address of the interface.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] if_num NSS interface number.
* @param[in] mac_addr New MAC address.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_if_change_mac_addr(struct nss_ctx_instance *nss_ctx, nss_if_num_t if_num, uint8_t *mac_addr);
/**
* nss_if_vsi_unassign
* Detach the VSI ID from the given interface.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] if_num NSS interface number.
* @param[in] vsi VSI ID.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_if_vsi_unassign(struct nss_ctx_instance *nss_ctx, nss_if_num_t if_num, uint32_t vsi);
/**
* nss_if_vsi_assign
* Attach the VSI ID to the given interface.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] if_num NSS interface number.
* @param[in] vsi VSI ID.
*
* @return
* Status of the transmit operation.
*/
nss_tx_status_t nss_if_vsi_assign(struct nss_ctx_instance *nss_ctx, nss_if_num_t if_num, uint32_t vsi);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2018-2021, 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.
@@ -106,6 +106,37 @@ enum nss_ipsec_cmn_ctx_type {
NSS_IPSEC_CMN_CTX_TYPE_MAX
};
/**
* nss_ipsec_cmn_stats_types
* IPsec common statistics types.
*/
enum nss_ipsec_cmn_stats_types {
NSS_IPSEC_CMN_STATS_FAIL_HEADROOM = NSS_STATS_NODE_MAX,
/**< Failure in headroom check. */
NSS_IPSEC_CMN_STATS_FAIL_TAILROOM, /**< Failure in tailroom check. */
NSS_IPSEC_CMN_STATS_FAIL_REPLAY, /**< Failure in anti-replay check. */
NSS_IPSEC_CMN_STATS_FAIL_REPLAY_DUP, /**< Failure in anti-replay; duplicate records. */
NSS_IPSEC_CMN_STATS_FAIL_REPLAY_WIN, /**< Failure in anti-replay; packet outside the window. */
NSS_IPSEC_CMN_STATS_FAIL_PBUF_CRYPTO, /**< Failure in crypto pbuf allocation. */
NSS_IPSEC_CMN_STATS_FAIL_QUEUE, /**< Failure due to queue full in IPsec. */
NSS_IPSEC_CMN_STATS_FAIL_QUEUE_CRYPTO, /**< Failure due to queue full in crypto. */
NSS_IPSEC_CMN_STATS_FAIL_QUEUE_NEXTHOP, /**< Failure due to queue full in next hop. */
NSS_IPSEC_CMN_STATS_FAIL_PBUF_ALLOC, /**< Failure in pbuf allocation. */
NSS_IPSEC_CMN_STATS_FAIL_PBUF_LINEAR, /**< Failure in pbuf linearization. */
NSS_IPSEC_CMN_STATS_FAIL_PBUF_STATS, /**< Failure in pbuf allocation for statistics. */
NSS_IPSEC_CMN_STATS_FAIL_PBUF_ALIGN, /**< Failure in pbuf access due to non-word alignmnt */
NSS_IPSEC_CMN_STATS_FAIL_CIPHER, /**< Failure in decrypting the data. */
NSS_IPSEC_CMN_STATS_FAIL_AUTH, /**< Failure in authenticating the data. */
NSS_IPSEC_CMN_STATS_FAIL_SEQ_OVF, /**< Failure due to sequence number rollover. */
NSS_IPSEC_CMN_STATS_FAIL_BLK_LEN, /**< Failure in decapsulation due to bad cipher block length. */
NSS_IPSEC_CMN_STATS_FAIL_HASH_LEN, /**< Failure in decapsulation due to bad hash block length. */
NSS_IPSEC_CMN_STATS_FAIL_TRANSFORM, /**< Failure in transformation; general error. */
NSS_IPSEC_CMN_STATS_FAIL_CRYPTO, /**< Failure in crypto transformation. */
NSS_IPSEC_CMN_STATS_FAIL_CLE, /**< Failure in classification; general failure. */
NSS_IPSEC_CMN_STATS_IS_STOPPED, /**< Indicates if SA is stopped; for example: sequence overflow. */
NSS_IPSEC_CMN_STATS_MAX, /**< Maximum statistics type. */
};
/**
* nss_ipsec_cmn_flow_tuple
* IPsec tuple for creating flow entries.
@@ -336,6 +367,16 @@ struct nss_ipsec_cmn_mdata {
} data; /**< Metadata payload. */
};
/**
* nss_ipsec_cmn_stats_notification
* IPsec common transmission statistics structure.
*/
struct nss_ipsec_cmn_stats_notification {
uint64_t stats_ctx[NSS_IPSEC_CMN_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_ipsec_cmn_msg
* Message structure for NSS IPsec messages.
@@ -424,6 +465,23 @@ extern struct nss_ctx_instance *nss_ipsec_cmn_get_context(void);
*/
extern uint32_t nss_ipsec_cmn_get_ifnum_with_coreid(int32_t ifnum);
/**
* nss_ipsec_cmn_unregister_if
* Deregisters an IPSEC tunnel interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*
* @dependencies
* The tunnel interface must have been previously registered.
*
* @return
* True if successful, else false.
*/
extern bool nss_ipsec_cmn_unregister_if(uint32_t if_num);
/**
* nss_ipsec_cmn_register_if
* Registers the IPsec interface with the NSS for sending and
@@ -451,39 +509,6 @@ extern struct nss_ctx_instance *nss_ipsec_cmn_register_if(uint32_t if_num, struc
nss_ipsec_cmn_msg_callback_t cb_msg,
uint32_t features, enum nss_dynamic_interface_type type, void *app_data);
/**
* nss_ipsec_cmn_unregister_if
* Deregisters a IPSEC tunnel interface from the NSS.
*
* @param[in] if_num NSS interface number.
. *
* @return
* None.
*
* @dependencies
* The tunnel interface must have been previously registered.
*
* @return
* True if successful, else false.
*/
extern bool nss_ipsec_cmn_unregister_if(uint32_t if_num);
/**
* nss_ipsec_cmn_notify_register
* Register an event callback to handle notification from IPsec firmware package.
*
* @datatypes
* nss_ipsec_cmn_msg_callback_t \n
*
* @param[in] ifnum NSS interface number.
* @param[in] cb Callback for IPsec message.
* @param[in] app_data Pointer to the application context.
*
* @return
* Pointer to NSS core context.
*/
extern struct nss_ctx_instance *nss_ipsec_cmn_notify_register(uint32_t ifnum, nss_ipsec_cmn_msg_callback_t cb, void *app_data);
/**
* nss_ipsec_cmn_notify_unregister
* Deregisters the message notifier from the HLOS driver.
@@ -502,6 +527,22 @@ extern struct nss_ctx_instance *nss_ipsec_cmn_notify_register(uint32_t ifnum, ns
*/
extern void nss_ipsec_cmn_notify_unregister(struct nss_ctx_instance *ctx, uint32_t if_num);
/**
* nss_ipsec_cmn_notify_register
* Registers an event callback to handle notifications from the IPsec firmware package.
*
* @datatypes
* nss_ipsec_cmn_msg_callback_t \n
*
* @param[in] ifnum NSS interface number.
* @param[in] cb Callback for IPsec message.
* @param[in] app_data Pointer to the application context.
*
* @return
* Pointer to the NSS core context.
*/
extern struct nss_ctx_instance *nss_ipsec_cmn_notify_register(uint32_t ifnum, nss_ipsec_cmn_msg_callback_t cb, void *app_data);
/**
* nss_ipsec_cmn_msg_init
* Initializes an IPsec message.
@@ -615,6 +656,34 @@ extern bool nss_ipsec_cmn_ppe_port_config(struct nss_ctx_instance *ctx, struct n
*/
bool nss_ipsec_cmn_ppe_mtu_update(struct nss_ctx_instance *ctx, uint32_t if_num, uint16_t mtu, uint16_t mru);
/**
* nss_ipsec_cmn_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_ipsec_cmn_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_ipsec_cmn_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_ipsec_cmn_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2021, 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.
@@ -31,6 +31,111 @@
* @{
*/
/*
* IPv4 connection flags (to be used with nss_ipv4_create::flags).
*/
#define NSS_IPV4_CREATE_FLAG_NO_SEQ_CHECK 0x01
/**< Rule for not checking sequence numbers. */
#define NSS_IPV4_CREATE_FLAG_BRIDGE_FLOW 0x02
/**< Rule that indicates pure bridge flow (no routing is involved). */
#define NSS_IPV4_CREATE_FLAG_ROUTED 0x04 /**< Rule for a routed connection. */
#define NSS_IPV4_CREATE_FLAG_DSCP_MARKING 0x08 /**< Rule for DSCP marking. */
#define NSS_IPV4_CREATE_FLAG_VLAN_MARKING 0x10 /**< Rule for VLAN marking. */
#define NSS_IPV4_CREATE_FLAG_QOS_VALID 0x20 /**< Rule for QoS is valid. */
/**
* nss_ipv4_create
* Information for an IPv4 flow or connection create rule.
*
* All fields must be passed in host-endian order.
*/
struct nss_ipv4_create {
int32_t src_interface_num;
/**< Source interface number (virtual or physical). */
int32_t dest_interface_num;
/**< Destination interface number (virtual or physical). */
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t flags; /**< Flags (if any) associated with this rule. */
uint32_t from_mtu; /**< MTU of the incoming interface. */
uint32_t to_mtu; /**< MTU of the outgoing interface. */
uint32_t src_ip; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t src_ip_xlate; /**< Translated source IP address (used with SNAT). */
int32_t src_port_xlate; /**< Translated source L4 port (used with SNAT). */
uint32_t dest_ip; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip_xlate;
/**< Translated destination IP address (used with DNAT). */
int32_t dest_port_xlate;
/**< Translated destination L4 port (used with DNAT). */
uint8_t src_mac[ETH_ALEN];
/**< Source MAC address. */
uint8_t dest_mac[ETH_ALEN];
/**< Destination MAC address. */
uint8_t src_mac_xlate[ETH_ALEN];
/**< Translated source MAC address (post-routing). */
uint8_t dest_mac_xlate[ETH_ALEN];
/**< Translated destination MAC address (post-routing). */
uint8_t flow_window_scale; /**< Window scaling factor (TCP). */
uint32_t flow_max_window; /**< Maximum window size (TCP). */
uint32_t flow_end; /**< TCP window end. */
uint32_t flow_max_end; /**< TCP window maximum end. */
uint32_t flow_pppoe_if_exist;
/**< Flow direction: PPPoE interface exist flag. */
int32_t flow_pppoe_if_num;
/**< Flow direction: PPPoE interface number. */
uint16_t ingress_vlan_tag; /**< Ingress VLAN tag expected for this flow. */
uint8_t return_window_scale;
/**< Window scaling factor of the return direction (TCP). */
uint32_t return_max_window;
/**< Maximum window size of the return direction. */
uint32_t return_end;
/**< Flow end for the return direction. */
uint32_t return_max_end;
/**< Flow maximum end for the return direction. */
uint32_t return_pppoe_if_exist;
/**< Return direction: PPPoE interface existence flag. */
int32_t return_pppoe_if_num;
/**< Return direction: PPPoE interface number. */
uint16_t egress_vlan_tag; /**< Egress VLAN tag expected for this flow. */
uint8_t spo_needed; /**< Indicates whether SPO is required. */
uint32_t param_a0; /**< Custom parameter 0. */
uint32_t param_a1; /**< Custom parameter 1. */
uint32_t param_a2; /**< Custom parameter 2. */
uint32_t param_a3; /**< Custom parameter 3. */
uint32_t param_a4; /**< Custom parameter 4. */
uint32_t qos_tag; /**< Deprecated, will be removed soon. */
uint32_t flow_qos_tag; /**< QoS tag value for the flow direction. */
uint32_t return_qos_tag; /**< QoS tag value for the return direction. */
uint8_t dscp_itag; /**< DSCP marking tag. */
uint8_t dscp_imask; /**< DSCP marking input mask. */
uint8_t dscp_omask; /**< DSCP marking output mask. */
uint8_t dscp_oval; /**< DSCP marking output value. */
uint16_t vlan_itag; /**< VLAN marking tag. */
uint16_t vlan_imask; /**< VLAN marking input mask. */
uint16_t vlan_omask; /**< VLAN marking output mask. */
uint16_t vlan_oval; /**< VLAN marking output value. */
uint32_t in_vlan_tag[MAX_VLAN_DEPTH];
/**< Ingress VLAN tag expected for this flow. */
uint32_t out_vlan_tag[MAX_VLAN_DEPTH];
/**< Egress VLAN tag expected for this flow. */
uint8_t flow_dscp; /**< IP DSCP value for the flow direction. */
uint8_t return_dscp; /**< IP DSCP value for the return direction. */
};
/**
* nss_ipv4_destroy
* Information for an IPv4 flow or connection destroy rule.
*/
struct nss_ipv4_destroy {
int32_t protocol; /**< L4 protocol ID. */
uint32_t src_ip; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
};
/**
* nss_ipv4_message_types
* IPv4 bridge and routing rule message types.
@@ -111,6 +216,12 @@ enum nss_ipv4_stats_types {
/**< Number of IPv4 multicast connection destroy requests that missed the cache. */
NSS_IPV4_STATS_MC_CONNECTION_FLUSHES,
/**< Number of IPv4 multicast connection flushes. */
NSS_IPV4_STATS_CONNECTION_CREATE_INVALID_MIRROR_IFNUM,
/**< Number of IPv4 mirror connection requests with an invalid interface number. */
NSS_IPV4_STATS_CONNECTION_CREATE_INVALID_MIRROR_IFTYPE,
/**< Number of IPv4 mirror connection requests with an invalid interface type. */
NSS_IPV4_STATS_MIRROR_FAILURES,
/**< Number of IPv4 mirror failures. */
NSS_IPV4_STATS_MAX,
/**< Maximum message type. */
};
@@ -175,6 +286,7 @@ enum nss_ipv4_stats_types {
/**< Ingress shaping fields are valid. */
#define NSS_IPV4_RULE_CREATE_IDENTIFIER_VALID 0x1000
/**< Identifier is valid. */
#define NSS_IPV4_RULE_CREATE_MIRROR_VALID 0x2000 /**< Mirror fields are valid. */
/*
* Multicast command rule flags
@@ -237,6 +349,15 @@ enum nss_ipv4_stats_types {
#define NSS_IPV4_RETURN_IDENTIFIER_VALID 0x02
/**< Identifier for return direction is valid. */
/*
* Mirror valid flags (to be used with the valid field of nss_ipv4_mirror_rule structure)
*/
#define NSS_IPV4_MIRROR_FLOW_VALID 0x01
/**< Mirror interface number for the flow direction is valid. */
#define NSS_IPV4_MIRROR_RETURN_VALID 0x02
/**< Mirror interface number for the return direction is valid. */
/**
* nss_ipv4_5tuple
* Common 5-tuple information.
@@ -410,6 +531,16 @@ struct nss_ipv4_identifier_rule {
/**< Identifier for return direction. */
};
/**
* nss_ipv4_mirror_rule
* Mirror rule structure.
*/
struct nss_ipv4_mirror_rule {
uint32_t valid; /**< Mirror validity flags. */
nss_if_num_t flow_ifnum; /**< Flow mirror interface number. */
nss_if_num_t return_ifnum; /**< Return mirror interface number. */
};
/**
* nss_ipv4_error_response_types
* Error types for IPv4 messages.
@@ -478,6 +609,8 @@ struct nss_ipv4_rule_create_msg {
/**< Ingress shaping related accleration parameters. */
struct nss_ipv4_identifier_rule identifier;
/**< Rule for adding identifier. */
struct nss_ipv4_mirror_rule mirror_rule;
/**< Mirror rule parameter. */
};
/**
@@ -821,6 +954,16 @@ struct nss_ipv4_node_sync {
uint32_t ipv4_mc_connection_flushes;
/**< Number of multicast connection flushes. */
uint32_t ipv4_connection_create_invalid_mirror_ifnum;
/**< Number of create request failed with an invalid mirror interface number. */
uint32_t ipv4_connection_create_invalid_mirror_iftype;
/**< Number of create request failed with an invalid mirror interface type. */
uint32_t ipv4_mirror_failures;
/**< Mirror packet failed. */
uint32_t exception_events[NSS_IPV4_EXCEPTION_EVENT_MAX];
/**< Number of exception events. */
};

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2021, 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.
@@ -27,6 +27,125 @@
* @{
*/
/**
* Converts the format of an IPv6 address from Linux to NSS. @hideinitializer
*/
#define IN6_ADDR_TO_IPV6_ADDR(ipv6, in6) \
{ \
((uint32_t *)ipv6)[0] = in6.in6_u.u6_addr32[0]; \
((uint32_t *)ipv6)[1] = in6.in6_u.u6_addr32[1]; \
((uint32_t *)ipv6)[2] = in6.in6_u.u6_addr32[2]; \
((uint32_t *)ipv6)[3] = in6.in6_u.u6_addr32[3]; \
}
/**
* Converts the format of an IPv6 address from NSS to Linux. @hideinitializer
*/
#define IPV6_ADDR_TO_IN6_ADDR(in6, ipv6) \
{ \
in6.in6_u.u6_addr32[0] = ((uint32_t *)ipv6)[0]; \
in6.in6_u.u6_addr32[1] = ((uint32_t *)ipv6)[1]; \
in6.in6_u.u6_addr32[2] = ((uint32_t *)ipv6)[2]; \
in6.in6_u.u6_addr32[3] = ((uint32_t *)ipv6)[3]; \
}
/**
* Format of an IPv6 address (16 * 8 bits).
*/
#define IPV6_ADDR_OCTAL_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
/**
* Prints an IPv6 address (16 * 8 bits).
*/
#define IPV6_ADDR_TO_OCTAL(ipv6) ((uint16_t *)ipv6)[0], ((uint16_t *)ipv6)[1], ((uint16_t *)ipv6)[2], ((uint16_t *)ipv6)[3], ((uint16_t *)ipv6)[4], ((uint16_t *)ipv6)[5], ((uint16_t *)ipv6)[6], ((uint16_t *)ipv6)[7]
/*
* IPv6 connection flags (to be used with nss_ipv6_create::flags.
*/
#define NSS_IPV6_CREATE_FLAG_NO_SEQ_CHECK 0x1
/**< Indicates that sequence numbers are not to be checked. */
#define NSS_IPV6_CREATE_FLAG_BRIDGE_FLOW 0x02
/**< Indicates that this is a pure bridge flow (no routing is involved). */
#define NSS_IPV6_CREATE_FLAG_ROUTED 0x04 /**< Rule is for a routed connection. */
#define NSS_IPV6_CREATE_FLAG_DSCP_MARKING 0x08 /**< Rule for DSCP marking. */
#define NSS_IPV6_CREATE_FLAG_VLAN_MARKING 0x10 /**< Rule for VLAN marking. */
#define NSS_IPV6_CREATE_FLAG_QOS_VALID 0x20 /**< Rule for Valid QoS. */
/**
* nss_ipv6_create
* Information for an IPv6 flow or connection create rule.
*
* All fields must be passed in host-endian order.
*/
struct nss_ipv6_create {
int32_t src_interface_num;
/**< Source interface number (virtual or physical). */
int32_t dest_interface_num;
/**< Destination interface number (virtual or physical). */
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t flags; /**< Flags (if any) associated with this rule. */
uint32_t from_mtu; /**< MTU of the incoming interface. */
uint32_t to_mtu; /**< MTU of the outgoing interface. */
uint32_t src_ip[4]; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip[4]; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
uint8_t src_mac[ETH_ALEN]; /**< Source MAC address. */
uint8_t dest_mac[ETH_ALEN]; /**< Destination MAC address. */
uint8_t flow_window_scale; /**< Window scaling factor (TCP). */
uint32_t flow_max_window; /**< Maximum window size (TCP). */
uint32_t flow_end; /**< TCP window end. */
uint32_t flow_max_end; /**< TCP window maximum end. */
uint32_t flow_pppoe_if_exist;
/**< Flow direction: PPPoE interface existence flag. */
int32_t flow_pppoe_if_num;
/**< Flow direction: PPPoE interface number. */
uint16_t ingress_vlan_tag;
/**< Ingress VLAN tag expected for this flow. */
uint8_t return_window_scale;
/**< Window scaling factor (TCP) for the return direction. */
uint32_t return_max_window;
/**< Maximum window size (TCP) for the return direction. */
uint32_t return_end;
/**< End for the return direction. */
uint32_t return_max_end;
/**< Maximum end for the return direction. */
uint32_t return_pppoe_if_exist;
/**< Return direction: PPPoE interface exist flag. */
int32_t return_pppoe_if_num;
/**< Return direction: PPPoE interface number. */
uint16_t egress_vlan_tag; /**< Egress VLAN tag expected for this flow. */
uint32_t qos_tag; /**< Deprecated; will be removed soon. */
uint32_t flow_qos_tag; /**< QoS tag value for flow direction. */
uint32_t return_qos_tag; /**< QoS tag value for the return direction. */
uint8_t dscp_itag; /**< DSCP marking tag. */
uint8_t dscp_imask; /**< DSCP marking input mask. */
uint8_t dscp_omask; /**< DSCP marking output mask. */
uint8_t dscp_oval; /**< DSCP marking output value. */
uint16_t vlan_itag; /**< VLAN marking tag. */
uint16_t vlan_imask; /**< VLAN marking input mask. */
uint16_t vlan_omask; /**< VLAN marking output mask. */
uint16_t vlan_oval; /**< VLAN marking output value. */
uint32_t in_vlan_tag[MAX_VLAN_DEPTH];
/**< Ingress VLAN tag expected for this flow. */
uint32_t out_vlan_tag[MAX_VLAN_DEPTH];
/**< Egress VLAN tag expected for this flow. */
uint8_t flow_dscp; /**< IP DSCP value for flow direction. */
uint8_t return_dscp; /**< IP DSCP value for the return direction. */
};
/**
* nss_ipv6_destroy
* Information for an IPv6 flow or connection destroy rule.
*/
struct nss_ipv6_destroy {
int32_t protocol; /**< L4 protocol (e.g., TCP or UDP). */
uint32_t src_ip[4]; /**< Source IP address. */
int32_t src_port; /**< Source L4 port (e.g., TCP or UDP port). */
uint32_t dest_ip[4]; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port (e.g., TCP or UDP port). */
};
/**
* nss_ipv6_stats_types
* IPv6 node statistics.
@@ -76,6 +195,14 @@ enum nss_ipv6_stats_types {
/**< Number of IPv6 multicast connection destroy requests that missed the cache. */
NSS_IPV6_STATS_MC_CONNECTION_FLUSHES,
/**< Number of IPv6 multicast connection flushes. */
NSS_IPV6_STATS_CONNECTION_CREATE_INVALID_MIRROR_IFNUM,
/**< Number of IPv6 mirror connection requests with an invalid interface number. */
NSS_IPV6_STATS_CONNECTION_CREATE_INVALID_MIRROR_IFTYPE,
/**< Number of IPv6 mirror connection requests with an invalid interface type. */
NSS_IPV6_STATS_MIRROR_FAILURES,
/**< Number of IPv6 mirror failures. */
NSS_IPV6_STATS_MAX,
/**< Maximum message type. */
};
@@ -169,6 +296,7 @@ enum nss_ipv6_dscp_map_actions {
/**< Destination MAC address fields are valid. */
#define NSS_IPV6_RULE_CREATE_IGS_VALID 0x800 /**< Ingress shaping fields are valid. */
#define NSS_IPV6_RULE_CREATE_IDENTIFIER_VALID 0x1000 /**< Identifier is valid. */
#define NSS_IPV6_RULE_CREATE_MIRROR_VALID 0x2000 /**< Mirror fields are valid. */
/*
* Multicast command rule flags
@@ -229,6 +357,14 @@ enum nss_ipv6_dscp_map_actions {
#define NSS_IPV6_RETURN_IDENTIFIER_VALID 0x02
/**< Identifier for return direction is valid. */
/*
* Mirror valid flags (to be used with the valid field of nss_ipv6_mirror_rule structure)
*/
#define NSS_IPV6_MIRROR_FLOW_VALID 0x01
/**< Mirror interface number for the flow direction is valid. */
#define NSS_IPV6_MIRROR_RETURN_VALID 0x02
/**< Mirror interface number for the return direction is valid. */
/**
* nss_ipv6_exception_events
* Exception events from an IPv6 bridge or route handler.
@@ -460,6 +596,16 @@ struct nss_ipv6_identifier_rule {
/**< Identifier for return direction. */
};
/**
* nss_ipv6_mirror_rule
* Mirror rule structure.
*/
struct nss_ipv6_mirror_rule {
uint32_t valid; /**< Mirror validity flags. */
nss_if_num_t flow_ifnum; /**< Flow mirror interface number. */
nss_if_num_t return_ifnum; /**< Return mirror interface number. */
};
/**
* nss_ipv6_error_response_types
* Error types for IPv6 messages.
@@ -556,6 +702,8 @@ struct nss_ipv6_rule_create_msg {
/**< Ingress shaping related accleration parameters. */
struct nss_ipv6_identifier_rule identifier;
/**< Rule for adding identifier. */
struct nss_ipv6_mirror_rule mirror_rule;
/**< Mirror rule parameter. */
};
/**
@@ -801,6 +949,16 @@ struct nss_ipv6_node_sync {
uint32_t ipv6_mc_connection_flushes;
/**< Number of multicast connection flushes. */
uint32_t ipv6_connection_create_invalid_mirror_ifnum;
/**< Number of create request failed with an invalid mirror interface number. */
uint32_t ipv6_connection_create_invalid_mirror_iftype;
/**< Number of create request failed with an invalid mirror interface type. */
uint32_t ipv6_mirror_failures;
/**< Mirror packet failed. */
uint32_t exception_events[NSS_IPV6_EXCEPTION_EVENT_MAX];
/**< Number of exception events. */
};

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2021, 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.
@@ -36,6 +36,16 @@
*/
#define NSS_MAX_MAP_T_DYNAMIC_INTERFACES 4
#define NSS_MAPT_MDATA_FLAG_DF_BIT (1 << 0)
/*
* mapt meta data
*/
struct nss_map_t_mdata {
uint16_t flags;
uint16_t res[6];
};
/**
* nss_map_t_msg_types
* Message types for MAP-T requests and responses.

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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
@@ -78,6 +78,20 @@ enum nss_mirror_error_type {
NSS_MIRROR_ERROR_TYPE_MAX, /**< Maximum message type. */
};
/**
* nss_mirror_stats
* Mirror interface debug statistics.
*/
enum nss_mirror_stats {
NSS_MIRROR_STATS_PKTS, /**< Number of packets exceptioned to host. */
NSS_MIRROR_STATS_BYTES, /**< Number of bytes exceptioned to host. */
NSS_MIRROR_STATS_TX_SEND_FAIL, /**< Transmit send failures. */
NSS_MIRROR_STATS_DEST_LOOKUP_FAIL, /**< Destination lookup failures. */
NSS_MIRROR_STATS_MEM_ALLOC_FAIL, /**< Memory allocation failures. */
NSS_MIRROR_STATS_COPY_FAIL, /**< Copy failures. */
NSS_MIRROR_STATS_MAX /**< Maximum statistics count. */
};
/**
* nss_mirror_configure_msg
* Mirror interface configuration information.
@@ -119,6 +133,16 @@ struct nss_mirror_stats_sync_msg {
struct nss_mirror_node_stats mirror_stats; /**< Debug statistics for mirror. */
};
/**
* nss_mirror_stats_notification
* Mirror transmission statistics structure.
*/
struct nss_mirror_stats_notification {
uint64_t stats_ctx[NSS_MIRROR_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_mirror_msg
* Data for sending and receiving mirror interface messages.
@@ -205,6 +229,17 @@ extern nss_tx_status_t nss_mirror_tx_msg(struct nss_ctx_instance *nss_ctx, struc
*/
extern nss_tx_status_t nss_mirror_tx_msg_sync(struct nss_ctx_instance *nss_ctx, struct nss_mirror_msg *msg);
/**
* nss_mirror_unregister_if
* Deregisters a mirror interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*/
extern void nss_mirror_unregister_if(uint32_t if_num);
/**
* nss_mirror_register_if
* Registers a mirror interface with the NSS for sending and receiving messages.
@@ -228,17 +263,6 @@ extern struct nss_ctx_instance *nss_mirror_register_if(uint32_t if_num,
nss_mirror_msg_callback_t event_callback,
struct net_device *netdev, uint32_t features);
/**
* nss_mirror_unregister_if
* Deregisters a mirror interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*/
extern void nss_mirror_unregister_if(uint32_t if_num);
/**
* nss_mirror_verify_if_num
* Verify whether the interface is an mirror interface or not.
@@ -259,6 +283,34 @@ extern bool nss_mirror_verify_if_num(uint32_t if_num);
*/
extern void nss_mirror_register_handler(void);
/**
* nss_mirror_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_mirror_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_mirror_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_mirror_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2016-2018, 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2018, 2020-2021, 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.
@@ -22,6 +22,8 @@
#ifndef _NSS_PPE_H_
#define _NSS_PPE_H_
typedef int32_t nss_ppe_port_t;
/**
* @addtogroup nss_ppe_subsystem
* @{
@@ -56,6 +58,34 @@ enum nss_ppe_sc_type {
NSS_PPE_SC_MAX, /**< Maximum service code. */
};
/**
* nss_ppe_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_ppe_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_ppe_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_ppe_stats_register_notifier(struct notifier_block *nb);
/** @} */ /* end_addtogroup nss_ppe_subsystem */
#endif /* _NSS_PPE_H_ */

View File

@@ -0,0 +1,79 @@
/*
**************************************************************************
* Copyright (c) 2021, 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.
**************************************************************************
*/
/**
* @file nss_ppe_vp.h
* NSS PPE Virtual Port definitions.
*/
#ifndef _NSS_PPE_VP_H_
#define _NSS_PPE_VP_H_
/**
* nss_if_ppe_vp_destroy
* Destroy the PPE VP for a given NSS interface number.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] if_num NSS interface number.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_ppe_vp_destroy(struct nss_ctx_instance *nss_ctx, nss_if_num_t if_num);
/**
* nss_ppe_vp_create
* Create the PPE VP for a given NSS interface number.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] if_num NSS interface number.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_ppe_vp_create(struct nss_ctx_instance *nss_ctx, nss_if_num_t if_num);
/**
* nss_ppe_vp_get_ppe_port_by_nssif
* Returns the PPE VP number for a given NSS interface number.
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] nss_if NSS interface number.
*
* @return
* Returns the PPE VP number corresponding to the NSS interface number.
*/
nss_ppe_port_t nss_ppe_vp_get_ppe_port_by_nssif(struct nss_ctx_instance *nss_ctx, nss_if_num_t nss_if);
/**
* nss_ppe_vp_get_context
* Return the NSS context of PPE VP.
*
* @datatypes
* nss_ctx_instance
*
* @return
* Pointer to the NSS core context.
*/
struct nss_ctx_instance *nss_ppe_vp_get_context(void);
#endif /* _NSS_PPE_VP_H_ */

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2019, 2021, 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.
@@ -27,10 +27,6 @@
* @{
*/
#define NSS_QVPN_INTERFACE_MAX_LONG BITS_TO_LONGS(NSS_MAX_NET_INTERFACES) /**< QVPN interface mapping bits. */
#define NSS_QVPN_STATS_MAX_LINES (NSS_STATS_NODE_MAX + 32) /**< Maxminum number of lines for QVPN statistics dump. */
#define NSS_QVPN_STATS_SIZE_PER_IF (NSS_STATS_MAX_STR_LENGTH * NSS_QVPN_STATS_MAX_LINES) /**< Total number of statistics per QVPN interface. */
#define NSS_QVPN_CMDS_MAX 10 /**< Maximum number of QVPN commands supported. */
#define NSS_QVPN_VPN_HDR_HEAD_SIZE_MAX 64 /**< Maximum size of QVPN header. */
#define NSS_QVPN_VPN_HDR_TAIL_SIZE_MAX 32 /**< Maximum size of QVPN tail. */
@@ -293,6 +289,16 @@ struct nss_qvpn_stats_sync_msg {
uint32_t exception_event[NSS_QVPN_EXCEPTION_EVENT_MAX]; /**< QVPN exception events. */
};
/**
* nss_qvpn_stats_notification
* QVPN transmission statistics structure.
*/
struct nss_qvpn_stats_notification {
uint64_t stats_ctx[NSS_STATS_NODE_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_qvpn_msg
* QVPN message structure for configuration and statistics.
@@ -419,6 +425,17 @@ typedef void (*nss_qvpn_callback_t)(struct net_device *netdev, struct sk_buff *s
*/
typedef void (*nss_qvpn_msg_callback_t)(void *app_data, struct nss_cmn_msg *msg);
/**
* nss_qvpn_unregister_if
* Deregisters the QVPN interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*/
void nss_qvpn_unregister_if(uint32_t if_num);
/**
* nss_qvpn_register_if
* Register to send/receive QVPN messages to NSS.
@@ -441,17 +458,6 @@ struct nss_ctx_instance *nss_qvpn_register_if(uint32_t if_num, nss_qvpn_callback
nss_qvpn_msg_callback_t qvpn_event_callback, struct net_device *netdev,
uint32_t features, void *app_ctx);
/**
* nss_qvpn_unregister_if
* Deregisters the QVPN interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*/
void nss_qvpn_unregister_if(uint32_t if_num);
/**
* nss_qvpn_ifnum_with_core_id
* Gets the QVPN interface number with the core ID.
@@ -481,6 +487,34 @@ void nss_qvpn_register_handler(void);
*/
unsigned long *nss_qvpn_ifmap_get(void);
/**
* nss_qvpn_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_qvpn_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_qvpn_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_qvpn_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -18,7 +18,7 @@
/*
* @file nss_rmnet_rx.h
* NSS Virtual interface message Structure and APIs
* NSS RMNET interface message Structure and APIs
*/
#ifndef __NSS_RMNET_RX_H
@@ -58,7 +58,7 @@ enum nss_rmnet_rx_msg_types {
/**
* nss_rmnet_rx_error_types
* Error types for the virtual interface.
* Error types for the RMNET interface.
*/
enum nss_rmnet_rx_error_types {
NSS_RMNET_RX_SUCCESS, /**< No error. */
@@ -125,19 +125,19 @@ struct nss_rmnet_rx_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of a virtual interface message.
* Payload of an RMNET interface message.
*/
union {
struct nss_rmnet_rx_config_msg if_config;
/**< Rule for creating a virtual interface. */
/**< Rule for creating an RMNET interface. */
struct nss_rmnet_rx_stats stats;
/**< Virtual interface statistics. */
/**< RMNET interface statistics. */
} msg; /**< Message payload. */
};
/**
* Callback to transmit interface data received from NSS
* to the transmit path of the virtual interface.
* to the transmit path of the RMNET interface.
*
* @datatypes
* net_device \n
@@ -183,8 +183,8 @@ struct nss_rmnet_rx_handle {
int32_t if_num_h2n; /**< Redirect interface number on host-to-NSS path. */
struct net_device *ndev; /**< Associated network device. */
struct nss_rmnet_rx_pvt *pvt; /**< Private data structure. */
uint64_t *stats_n2h; /**< Virtual interface statistics from NSS-to-host. */
uint64_t *stats_h2n; /**< Virtual interface statistics from host-to-NSS. */
uint64_t *stats_n2h; /**< RMNET interface statistics from NSS-to-host. */
uint64_t *stats_h2n; /**< RMNET interface statistics from host-to-NSS. */
atomic_t refcnt; /**< Reference count. */
nss_rmnet_rx_msg_callback_t cb; /**< Message callback. */
void *app_data; /**< Application data to be passed to the callback. */
@@ -192,12 +192,12 @@ struct nss_rmnet_rx_handle {
/**
* nss_rmnet_rx_destroy_sync
* Destroys the virtual interface synchronously.
* Destroys the RMNET interface synchronously.
*
* @datatypes
* nss_rmnet_rx_handle
*
* @param[in,out] handle Pointer to the virtual interface handle (provided during
* @param[in,out] handle Pointer to the RMNET interface handle (provided during
* dynamic interface allocation).
*
* @return
@@ -210,7 +210,7 @@ extern nss_tx_status_t nss_rmnet_rx_destroy_sync(struct nss_rmnet_rx_handle *han
/**
* nss_rmnet_rx_create_sync_nexthop
* Creates a virtual interface synchronously with specified nexthops.
* Creates an RMNET interface synchronously with specified nexthops.
*
* @datatypes
* net_device
@@ -220,19 +220,33 @@ extern nss_tx_status_t nss_rmnet_rx_destroy_sync(struct nss_rmnet_rx_handle *han
* @param[in] nexthop_h2n Nexthop interface number of host-to-NSS dynamic interface.
*
* @return
* Pointer to NSS virtual interface handle.
* Pointer to the NSS RMNET interface handle.
*/
extern struct nss_rmnet_rx_handle *nss_rmnet_rx_create_sync_nexthop(struct net_device *netdev, uint32_t nexthop_n2h, uint32_t nexthop_h2n);
/**
* nss_rmnet_rx_create
* Creates an RMNET interface synchronously with generic nexthops.
*
* @datatypes
* net_device
*
* @param[in] netdev Pointer to the associated network device.
*
* @return
* Pointer to the NSS RMNET interface handle.
*/
extern struct nss_rmnet_rx_handle *nss_rmnet_rx_create(struct net_device *netdev);
/**
* nss_rmnet_rx_tx_buf
* Forwards virtual interface packets to the NSS.
* Forwards RMNET interface packets to the NSS.
*
* @datatypes
* nss_rmnet_rx_handle \n
* sk_buff
*
* @param[in,out] handle Pointer to the virtual interface handle (provided during
* @param[in,out] handle Pointer to the RMNET interface handle (provided during
* registration).
* @param[in] skb Pointer to the data socket buffer.
*
@@ -244,14 +258,14 @@ extern nss_tx_status_t nss_rmnet_rx_tx_buf(struct nss_rmnet_rx_handle *handle,
/**
* nss_rmnet_rx_tx_msg
* Sends a message to the virtual interface.
* Sends a message to the RMNET interface.
*
* @datatypes
* nss_ctx_instance \n
* nss_rmnet_rx_msg
*
* @param[in] nss_ctx Pointer to the NSS context (provided during registration).
* @param[in] nvim Pointer to the virtual interface message.
* @param[in] nvim Pointer to the RMNET interface message.
*
* @return
* Command Tx status.
@@ -260,12 +274,12 @@ extern nss_tx_status_t nss_rmnet_rx_tx_msg(struct nss_ctx_instance *nss_ctx, str
/**
* nss_rmnet_rx_xmit_callback_unregister
* Deregisters the transmit callback from the virtual interface.
* Deregisters the transmit callback from the RMNET interface.
*
* @datatypes
* nss_rmnet_rx_handle
*
* @param[in,out] handle Pointer to the virtual interface handle.
* @param[in,out] handle Pointer to the RMNET interface handle.
*
* @return
* None.
@@ -274,15 +288,15 @@ extern void nss_rmnet_rx_xmit_callback_unregister(struct nss_rmnet_rx_handle *ha
/**
* nss_rmnet_rx_xmit_callback_register
* Registers a transmit callback to a virtual interface.
* Registers a transmit callback to an RMNET interface.
*
* @datatypes
* nss_rmnet_rx_handle \n
* nss_rmnet_rx_xmit_callback_t
*
* @param[in,out] handle Pointer to the virtual interface handle (provided during
* @param[in,out] handle Pointer to the RMNET interface handle (provided during
* dynamic interface allocation).
* @param[in] cb Callback handler for virtual data packets.
* @param[in] cb Callback handler for RMNET data packets.
*
* @return
* None.
@@ -292,12 +306,12 @@ extern void nss_rmnet_rx_xmit_callback_register(struct nss_rmnet_rx_handle *hand
/**
* nss_rmnet_rx_unregister
* Deregisters a virtual interface from the NSS driver.
* Deregisters an RMNET interface from the NSS driver.
*
* @datatypes
* nss_rmnet_rx_handle
*
* @param[in,out] handle Pointer to the virtual interface handle.
* @param[in,out] handle Pointer to the RMNET interface handle.
*
* @return
* None.
@@ -306,16 +320,16 @@ extern void nss_rmnet_rx_unregister(struct nss_rmnet_rx_handle *handle);
/**
* nss_rmnet_rx_register
* Registers a virtual Interface with NSS driver.
* Registers an RMNET Interface with NSS driver.
*
* @datatypes
* nss_rmnet_rx_handle \n
* nss_rmnet_rx_data_callback_t \n
* net_device
*
* @param[in,out] handle Pointer to the virtual interface handle (provided during
* @param[in,out] handle Pointer to the RMNET interface handle (provided during
* dynamic interface allocation).
* @param[in] data_callback Callback handler for virtual data packets.
* @param[in] data_callback Callback handler for RMNET data packets.
* @param[in] netdev Pointer to the associated network device.
*
* @return
@@ -349,22 +363,22 @@ extern int32_t nss_rmnet_rx_get_ifnum(struct net_device *dev);
/**
* nss_rmnet_rx_get_interface_num
* Returns the virtual interface number associated with the handle.
* Returns the RMNET interface number associated with the handle.
*
* @datatypes
* nss_rmnet_rx_handle
*
* @param[in] handle Pointer to the virtual interface handle (provided during
* @param[in] handle Pointer to the RMNET interface handle (provided during
dynamic interface allocation).
*
* @return
* Virtual interface number.
* RMNET interface number.
*/
extern int32_t nss_rmnet_rx_get_interface_num(struct nss_rmnet_rx_handle *handle);
/**
* nss_rmnet_rx_get_context
* Gets the virtual interface context.
* Gets the RMNET interface context.
*
* @return
* Pointer to the NSS core context.

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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
@@ -68,6 +68,43 @@ enum nss_tls_error {
NSS_TLS_ERROR_MAX, /**< Maximum TLS error. */
};
/**
* nss_tls_stats_types
* TLS statistics types.
*/
enum nss_tls_stats_types {
NSS_TLS_STATS_SINGLE_REC = NSS_STATS_NODE_MAX,
/**< Number of transmit single record datagrams. */
NSS_TLS_STATS_MULTI_REC, /**< Number of multiple transmit record datagrams. */
NSS_TLS_STATS_TX_INVAL_REQS, /**< Number of transmit invalidations successfully requested. */
NSS_TLS_STATS_RX_CCS_REC, /**< Number of change cipher specification records received. */
NSS_TLS_STATS_FAIL_CCS, /**< Failure to switch to new crypto. */
NSS_TLS_STATS_ETH_NODE_DEACTIVE, /**< Ethernet node deactivated because no crypto was available. */
NSS_TLS_STATS_CRYPTO_ALLOC_SUCCESS, /**< Number of successful crypto allocations. */
NSS_TLS_STATS_CRYPTO_FREE_REQ, /**< Number of crypto-free requests. */
NSS_TLS_STATS_CRYPTO_FREE_SUCCESS, /**< Number of crypto-free successes. */
NSS_TLS_STATS_FAIL_CRYPTO_ALLOC, /**< Number of failed crypto allocations. */
NSS_TLS_STATS_FAIL_CRYPTO_LOOKUP, /**< Failure to find an active crypto session. */
NSS_TLS_STATS_FAIL_REQ_ALLOC, /**< Failure to allocate request memory pool. */
NSS_TLS_STATS_FAIL_PBUF_STATS, /**< Failure in pbuf allocation for statistics. */
NSS_TLS_STATS_FAIL_CTX_ACTIVE, /**< Failure in enqueue due to inactive context. */
NSS_TLS_STATS_HW_LEN_ERROR, /**< Length error. */
NSS_TLS_STATS_HW_TOKEN_ERROR, /**< Token error; unknown token command or instruction. */
NSS_TLS_STATS_HW_BYPASS_ERROR, /**< Token contains too much bypass data. */
NSS_TLS_STATS_HW_CRYPTO_ERROR, /**< Cryptographic block size error. */
NSS_TLS_STATS_HW_HASH_ERROR, /**< Hash block size error. */
NSS_TLS_STATS_HW_CONFIG_ERROR, /**< Invalid command, algorithm, or mode combination. */
NSS_TLS_STATS_HW_ALGO_ERROR, /**< Unsupported algorithm. */
NSS_TLS_STATS_HW_HASH_OVF_ERROR, /**< Hash input overflow. */
NSS_TLS_STATS_HW_AUTH_ERROR, /**< Hash input overflow. */
NSS_TLS_STATS_HW_PAD_VERIFY_ERROR, /**< Pad verification error. */
NSS_TLS_STATS_HW_TIMEOUT_ERROR, /**< Data timed out. */
NSS_TLS_STATS_NO_DESC_IN, /**< Ingress DMA descriptor not available. */
NSS_TLS_STATS_NO_DESC_OUT, /**< Egress DMA descriptor not available. */
NSS_TLS_STATS_NO_REQS, /**< Not enough requests available for records. */
NSS_TLS_STATS_MAX, /**< Maximum statistics type. */
};
/**
* nss_tls_hw_stats
* TLS HW statistics.
@@ -156,6 +193,16 @@ struct nss_tls_cipher_update {
uint8_t reserved; /**< Reserved for future use. */
};
/**
* nss_tls_stats_notification
* TLS transmission statistics structure.
*/
struct nss_tls_stats_notification {
uint64_t stats_ctx[NSS_TLS_STATS_MAX]; /**< Context transmission statistics. */
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number. */
};
/**
* nss_tls_msg
* Data for sending and receiving TLS messages.
@@ -245,7 +292,7 @@ extern nss_tx_status_t nss_tls_tx_msg(struct nss_ctx_instance *nss_ctx, struct n
* @param[in] if_num NSS interface number.
* @param[in] type Type of message.
* @param[in] len Size of the payload.
* @param[in] nicm Pointer to the NSS IPsec message.
* @param[in] ntcm Pointer to the NSS IPsec message.
*
* @return
* Status of the Tx operation.
@@ -254,6 +301,20 @@ extern nss_tx_status_t nss_tls_tx_msg_sync(struct nss_ctx_instance *nss_ctx, uin
enum nss_tls_msg_type type, uint16_t len,
struct nss_tls_msg *ntcm);
/**
* nss_tls_unregister_if
* Deregisters a TLS session interface from the NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*
* @dependencies
* The TLS session interface must have been previously registered.
*/
extern void nss_tls_unregister_if(uint32_t if_num);
/**
* nss_tls_register_if
* Registers a TLS session interface with the NSS for sending and receiving
@@ -284,22 +345,19 @@ extern struct nss_ctx_instance *nss_tls_register_if(uint32_t if_num,
void *app_ctx);
/**
* nss_tls_unregister_if
* Deregisters a TLS session interface from the NSS.
* nss_tls_notify_unregister
* Deregisters an event callback.
*
* @param[in] if_num NSS interface number.
* @param[in] ifnum NSS interface number.
*
* @return
* None.
*
* @dependencies
* The TLS session interface must have been previously registered.
*/
extern void nss_tls_unregister_if(uint32_t if_num);
extern void nss_tls_notify_unregister(uint32_t ifnum);
/**
* nss_tls_notify_register
* Register an event callback to handle notification from TLS firmware package.
* Registers an event callback to handle notification from TLS firmware package.
*
* @datatypes
* nss_tls_msg_callback_t
@@ -313,17 +371,6 @@ extern void nss_tls_unregister_if(uint32_t if_num);
*/
extern struct nss_ctx_instance *nss_tls_notify_register(uint32_t ifnum, nss_tls_msg_callback_t ev_cb, void *app_data);
/**
* nss_tls_notify_unregister
* Unregister an event callback.
*
* @param[in] ifnum NSS interface number.
*
* @return
* None.
*/
extern void nss_tls_notify_unregister(uint32_t ifnum);
/**
* nss_tls_msg_init
* Initializes a TLS message sent asynchronously.
@@ -377,6 +424,44 @@ extern struct nss_ctx_instance *nss_tls_get_context(void);
* Pointer to the device.
*/
extern struct device *nss_tls_get_dev(struct nss_ctx_instance *nss_ctx);
/**
* nss_tls_ifmap_get
* Returns active TLS interfaces.
*
* @return
* Pointer to the interface map.
*/
unsigned long *nss_tls_ifmap_get(void);
/**
* nss_tls_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_tls_stats_unregister_notifier(struct notifier_block *nb);
/**
* nss_tls_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or non-zero on failure.
*/
extern int nss_tls_stats_register_notifier(struct notifier_block *nb);
/**
* @}
*/

View File

@@ -0,0 +1,284 @@
/*
**************************************************************************
* Copyright (c) 2021, 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.
**************************************************************************
*/
/**
* @file nss_udp_st.h
* NSS Ethernet interface definitions.
*/
#ifndef __NSS_UDP_ST_H
#define __NSS_UDP_ST_H
/**
* @addtogroup nss_udp_st_subsystem
* @{
*/
#define NSS_UDP_ST_TX_CONN_MAX 16
#define NSS_UDP_ST_FLAG_IPV4 4 /**< L3 Protocol - IPv4. */
#define NSS_UDP_ST_FLAG_IPV6 6 /**< L3 Protocol - IPv6. */
/**
* nss_udp_st_message_types
* UDP speed test message types.
*/
enum nss_udp_st_message_types {
NSS_UDP_ST_START_MSG, /**< Start message. */
NSS_UDP_ST_STOP_MSG, /**< Stop message. */
NSS_UDP_ST_CFG_RULE_MSG, /**< Configure IPv4/IPv6 rule. */
NSS_UDP_ST_UNCFG_RULE_MSG, /**< Unconfigure IPv4/IPv6 rule. */
NSS_UDP_ST_STATS_SYNC_MSG, /**< Statistic syncronization. */
NSS_UDP_ST_TX_CREATE_MSG, /**< Create transmit node. */
NSS_UDP_ST_TX_DESTROY_MSG, /**< Destroy transmit node. */
NSS_UDP_ST_RESET_STATS_MSG, /**< Reset existing statistics. */
NSS_UDP_ST_MAX_MSG_TYPES, /**< Maximum message type. */
};
/**
* nss_udp_st_test_types
* Test types of the UDP speed test.
*/
enum nss_udp_st_test_types {
NSS_UDP_ST_TEST_RX, /**< Test type is receive. */
NSS_UDP_ST_TEST_TX, /**< Test type is transmit. */
NSS_UDP_ST_TEST_MAX /**< Maximum test type. */
};
/**
* nss_udp_st_error
* UDP speed test error types.
*/
enum nss_udp_st_error {
NSS_UDP_ST_ERROR_NONE, /**< No error. */
NSS_UDP_ST_ERROR_INCORRECT_RATE, /**< Incorrect Tx rate. */
NSS_UDP_ST_ERROR_INCORRECT_BUFFER_SIZE, /**< Incorrect buffer size. */
NSS_UDP_ST_ERROR_MEMORY_FAILURE, /**< Memory allocation failed. */
NSS_UDP_ST_ERROR_INCORRECT_STATE, /**< Trying to configure during incorrect state. */
NSS_UDP_ST_ERROR_INCORRECT_FLAGS, /**< Incorrect flag configuration. */
NSS_UDP_ST_ERROR_ENTRY_EXIST, /**< Given tunnel entry already exists. */
NSS_UDP_ST_ERROR_ENTRY_ADD_FAILED, /**< UDP ST Encap entry addition failed. */
NSS_UDP_ST_ERROR_ENTRY_NOT_EXIST, /**< Given tunnel entry does not exists. */
NSS_UDP_ST_ERROR_WRONG_START_MSG_TYPE, /**< Start message type error. */
NSS_UDP_ST_ERROR_WRONG_STOP_MSG_TYPE, /**< Stop message type error. */
NSS_UDP_ST_ERROR_TOO_MANY_USERS, /**< Too many users tried to be added. */
NSS_UDP_ST_ERROR_UNKNOWN_MSG_TYPE, /**< Unknown message type failure. */
NSS_UDP_ST_ERROR_PB_ALLOC, /**< Pbuf allocation failed. */
NSS_UDP_ST_ERROR_PB_SIZE, /**< Pbuf size is too small to fit buffer. */
NSS_UDP_ST_ERROR_DROP_QUEUE, /**< Packet dropped enqueue next node. */
UDP_ST_ERROR_TIMER_MISSED, /**< Timer call is missed. */
NSS_UDP_ST_ERROR_MAX, /**< Maximum error type. */
};
/**
* nss_udp_st_stats_time
* UDP speed test time statistics types.
*/
enum nss_udp_st_stats_time {
NSS_UDP_ST_STATS_TIME_START, /**< Start time of the test. */
NSS_UDP_ST_STATS_TIME_CURRENT, /**< Current time of the running test. */
NSS_UDP_ST_STATS_TIME_ELAPSED, /**< Elapsed time of the current test. */
NSS_UDP_ST_STATS_TIME_MAX /**< Maximum time statistics. */
};
/**
* Create TX node to start pushing rules.
*/
struct nss_udp_st_tx_create {
uint32_t rate; /**< Rate in Mbps. */
uint32_t buffer_size; /**< UDP buffer size. */
uint8_t dscp; /**< DSCP value. */
};
/**
* Destroy Tx node.
*/
struct nss_udp_st_tx_destroy {
uint32_t flag; /**< Tx destroy flag. */
};
/**
* NSS UDP speed test start structure.
*/
struct nss_udp_st_start {
uint32_t type; /**< Started test type (for example, receive or transmit). */
};
/**
* NSS UDP speed test stop structure.
*/
struct nss_udp_st_stop {
uint32_t type; /**< Stopped test type (for example, receive or transmit). */
};
/**
* NSS UDP speed test ip structure
*/
struct nss_udp_st_ip {
union {
uint32_t ipv4; /**< IPv4 address. */
uint32_t ipv6[4]; /**< IPv6 address. */
} ip;
};
/**
* NSS UDP speed test IPv4/IPv6 configuration structure.
*/
struct nss_udp_st_cfg {
struct nss_udp_st_ip src_ip; /**< Source IP address. */
int32_t src_port; /**< Source L4 port. */
struct nss_udp_st_ip dest_ip; /**< Destination IP address. */
int32_t dest_port; /**< Destination L4 port. */
uint32_t type; /**< Started test type (for example, receive or transmit). */
uint16_t ip_version; /**< IP version to indicate IPv4 or IPv6. */
};
/**
* NSS UDP speed test node statistics structure.
*/
struct nss_udp_st_node_stats {
struct nss_cmn_node_stats node_stats; /**< Common node statistics for the UDP speed test. */
uint32_t errors[NSS_UDP_ST_ERROR_MAX]; /**< Error statistics. */
};
/**
* NSS UDP speed test statistics structure.
*/
struct nss_udp_st_stats {
struct nss_udp_st_node_stats nstats; /**< Node statistics for the UDP speed test. */
uint32_t time_stats[NSS_UDP_ST_TEST_MAX][NSS_UDP_ST_STATS_TIME_MAX];
/**< Time statistics. */
};
/**
* NSS UDP speed test reset statistics structure.
*/
struct nss_udp_st_reset_stats {
uint32_t flag; /**< Reset statistics flag. */
};
/**
* Message structure of the UDP speed test commands.
*/
struct nss_udp_st_msg {
struct nss_cmn_msg cm; /**< Message header. */
union {
struct nss_udp_st_tx_create create; /**< Prepare transmit message. */
struct nss_udp_st_tx_destroy destroy; /**< Destroy transmit message. */
struct nss_udp_st_start start; /**< Start message. */
struct nss_udp_st_stop stop; /**< Stop message. */
struct nss_udp_st_cfg cfg; /**< IPv4/IPv6 configuration message. */
struct nss_udp_st_cfg uncfg; /**< IPv4/IPv6 unconfiguration message. */
struct nss_udp_st_stats stats; /**< Statistics synchronization message. */
struct nss_udp_st_reset_stats reset_stats;
/**< Reset statistics message. */
} msg;
};
/**
* Callback function for receiving UDP speed test messages.
*
* @datatypes
* nss_udp_st_msg
*
* @param[in] app_data Pointer to the application context of the message.
* @param[in] msg Pointer to the message data.
*/
typedef void (*nss_udp_st_msg_callback_t)(void *app_data, struct nss_udp_st_msg *msg);
/**
* nss_udp_st_register_handler
* Registers the UDP speed test message handler.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS context.
*
* @return
* None.
*/
extern void nss_udp_st_register_handler(struct nss_ctx_instance *nss_ctx);
/**
* nss_udp_st_tx
* Transmits a UDP speed test message to the NSS.
*
* @datatypes
* nss_ctx_instance \n
* nss_udp_st_msg
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] num Pointer to the message data.
*
* @return
* Status of the transmit operation.
*/
extern nss_tx_status_t nss_udp_st_tx(struct nss_ctx_instance *nss_ctx, struct nss_udp_st_msg *num);
/**
* nss_udp_st_tx_sync
* Transmits a synchronous UDP speed test message to the NSS.
*
* @datatypes
* nss_ctx_instance \n
* nss_udp_st_msg
*
* @param[in] nss_ctx Pointer to the NSS context.
* @param[in] num Pointer to the message data.
*
* @return
* Status of the transmit operation.
*/
extern nss_tx_status_t nss_udp_st_tx_sync(struct nss_ctx_instance *nss_ctx, struct nss_udp_st_msg *num);
/**
* nss_udp_st_msg_init
* Initializes UDP speed test messages.
*
* @datatypes
* nss_udp_st_msg \n
* nss_udp_st_msg_callback_t
*
* @param[in,out] num Pointer to the NSS interface message.
* @param[in] if_num NSS interface number.
* @param[in] type Type of message.
* @param[in] len Size of the payload.
* @param[in] cb Callback function for the message.
* @param[in] app_data Pointer to the application context of the message.
*
* @return
* None.
*/
extern void nss_udp_st_msg_init(struct nss_udp_st_msg *num, uint16_t if_num, uint32_t type, uint32_t len,
nss_udp_st_msg_callback_t cb, void *app_data);
/**
* nss_udp_st_get_mgr
* Gets the NSS context that is managing UDP speed sest processes.
*
* @return
* Pointer to the NSS core context.
*/
extern struct nss_ctx_instance *nss_udp_st_get_mgr(void);
/**
*@}
*/
#endif /* __NSS_UDP_ST_H */

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2019, 2021 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.
@@ -111,6 +111,7 @@ struct nss_vxlan_stats_msg {
uint32_t except_vni_lookup_failed; /**< Virtual network ID look up failed. */
uint32_t dropped_malformed; /**< Packet is malformed. */
uint32_t dropped_next_node_queue_full; /**< Next node dropped the packet. */
uint32_t except_inner_hash; /**< Inner hash calculation failed. */
};
/**

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
* Copyright (c) 2015-2018, 2021, 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.
@@ -722,6 +722,10 @@ struct nss_wifi_peer_ol_stats {
uint32_t ppdu_retries; /**< Number of PPDU retries. */
uint32_t rssi_chains[NSS_WIFI_MAX_RSSI_CHAINS];
/**< Acknowledgment RSSI per chain. */
uint32_t rx_msdus; /**< Number of MSDUs received. */
uint32_t rx_bytes; /**< Number of bytes received. */
uint32_t rx_mpdus; /**< Number of MPDUs received. */
uint32_t rx_retries; /**< Number of MPDU retries. */
};
/**

View File

@@ -35,6 +35,7 @@ enum nss_wifi_ext_vdev_msg_types {
NSS_WIFI_EXT_VDEV_MSG_CONFIGURE_WDS,
NSS_WIFI_EXT_VDEV_SET_NEXT_HOP,
NSS_WIFI_EXT_VDEV_MSG_STATS_SYNC,
NSS_WIFI_EXT_VDEV_MSG_CONFIGURE_VLAN,
NSS_WIFI_EXT_VDEV_MSG_MAX
};
@@ -50,12 +51,16 @@ enum nss_wifi_ext_vdev_error_types {
NSS_WIFI_EXT_VDEV_ERROR_INV_PVAP_ID, /**< Invalid parent virtual device interface number. */
NSS_WIFI_EXT_VDEV_ERROR_RADIO_NOT_PRESENT, /**< Radio node is not present. */
NSS_WIFI_EXT_VDEV_ERROR_INV_IF, /**< Message sent on invalid interface number. */
NSS_WIFI_EXT_VDEV_ERROR_MAX, /**< Maxiumum error types. */
NSS_WIFI_EXT_VDEV_ERROR_INV_VLAN_ID, /**< Invalid VLAN ID. */
NSS_WIFI_EXT_VDEV_ERROR_INV_CMD, /**< Invalid command. */
NSS_WIFI_EXT_VDEV_ERROR_PEERID_ALREADY_CONFIGURED,
/**< Peer ID is already configured. */
NSS_WIFI_EXT_VDEV_ERROR_MAX /**< Maxiumum error types. */
};
/**
* nss_wifi_ext_vdev_wds_msg
* Extended WDS config message.
* Extended WDS configuration message.
*/
struct nss_wifi_ext_vdev_wds_msg {
uint16_t wds_peer_id; /**< WDS station peer ID. */
@@ -90,6 +95,14 @@ struct nss_wifi_ext_vdev_set_next_hop_msg {
uint32_t if_num; /**< Interface number. */
};
/**
* nss_wifi_ext_vdev_vlan_msg
* Extended VLAN configuration message.
*/
struct nss_wifi_ext_vdev_vlan_msg {
uint16_t vlan_id; /**< VLAN ID. */
};
/**
* nss_wifi_ext_vdev_msg
* Message structure to Send/Receive commands.
@@ -102,6 +115,7 @@ struct nss_wifi_ext_vdev_msg {
struct nss_wifi_ext_vdev_wds_msg wmsg; /**< WDS configure message. */
struct nss_wifi_ext_vdev_set_next_hop_msg wnhm; /**< Next hop set message. */
struct nss_wifi_ext_vdev_stats stats; /**< Statistics messasge. */
struct nss_wifi_ext_vdev_vlan_msg vmsg; /**< VLAN message. */
} msg;
};
@@ -126,7 +140,7 @@ typedef void (*nss_wifi_ext_vdev_data_callback_t)(struct net_device *netdev, str
* nss_wifi_ext_vdev_msg
*
* @param[in] app_data Pointer to the application context of the message.
* @param[in]wevm Pointer to the message data.
* @param[in] wevm Pointer to the message data.
*/
typedef void (*nss_wifi_ext_vdev_msg_callback_t)(void *app_data, struct nss_cmn_msg *ncm);
@@ -225,7 +239,7 @@ extern nss_tx_status_t nss_wifi_ext_vdev_tx_msg(struct nss_ctx_instance *nss_ctx
* nss_ctx_instance \n
* nss_wifi_ext_vdev_msg
*
* @param[in] nss_ctx NSS core context.
* @param[in] nss_ctx NSS core context.
* @param[in] nwevm Pointer to Wi-Fi extended virtual interface message data.
*
* @return
@@ -240,8 +254,8 @@ extern nss_tx_status_t nss_wifi_ext_vdev_tx_msg_sync(struct nss_ctx_instance *ns
* @datatypes
* nss_ctx_instance \n
*
* @param[in] nss_ctx NSS core context.
* @param[in] ifnum NSS interface number.
* @param[in] ctx NSS core context.
* @param[in] if_num NSS interface number.
* @param[in] next_hop Next hop interface number.
*/
extern nss_tx_status_t nss_wifi_ext_vdev_set_next_hop(struct nss_ctx_instance *ctx, int if_num, int next_hop);
@@ -267,8 +281,8 @@ extern struct nss_ctx_instance *nss_wifi_ext_vdev_get_ctx(void);
*
* @param[in] if_num NSS interface number.
* @param[in] cb_func_data Callback for the data.
* @param[in] cb_func_msg Callback for the message.
* @param[in] cb_func_event Callback for the event message.
* @param[in] cb_func_ext Callback for the message.
* @param[in] cb_func_msg Callback for the event message.
* @param[in] features Data socket buffer types supported by this interface.
* @param[in] netdev Pointer to the associated network device.
* @param[in] app_ctx Pointer to the application context.

View File

@@ -1,292 +0,0 @@
/*
**************************************************************************
* Copyright (c) 2015-2017, 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.
**************************************************************************
*/
/**
* @file nss_wifi_if.h
* NSS Wi-Fi interface message Structure and APIs.
*/
#ifndef __NSS_WIFI_IF_H
#define __NSS_WIFI_IF_H
/**
* @addtogroup nss_wifi_subsystem
* @{
*/
/**
* nss_wifi_if_msg_types
* Message types for Wi-Fi interface requests and responses.
*/
enum nss_wifi_if_msg_types {
NSS_WIFI_IF_OPEN = NSS_IF_OPEN,
NSS_WIFI_IF_CLOSE = NSS_IF_CLOSE,
NSS_WIFI_IF_LINK_STATE_NOTIFY = NSS_IF_LINK_STATE_NOTIFY,
NSS_WIFI_IF_MTU_CHANGE = NSS_IF_MTU_CHANGE,
NSS_WIFI_IF_MAC_ADDR_SET = NSS_IF_MAC_ADDR_SET,
NSS_WIFI_IF_STATS_SYNC = NSS_IF_STATS,
NSS_WIFI_IF_ISHAPER_ASSIGN = NSS_IF_ISHAPER_ASSIGN,
NSS_WIFI_IF_BSHAPER_ASSIGN = NSS_IF_BSHAPER_ASSIGN,
NSS_WIFI_IF_ISHAPER_UNASSIGN = NSS_IF_ISHAPER_UNASSIGN,
NSS_WIFI_IF_BSHAPER_UNASSIGN = NSS_IF_BSHAPER_UNASSIGN,
NSS_WIFI_IF_ISHAPER_CONFIG = NSS_IF_ISHAPER_CONFIG,
NSS_WIFI_IF_BSHAPER_CONFIG = NSS_IF_BSHAPER_CONFIG,
NSS_WIFI_IF_VSI_ASSIGN = NSS_IF_VSI_ASSIGN,
NSS_WIFI_IF_VSI_UNASSIGN = NSS_IF_VSI_UNASSIGN,
NSS_WIFI_IF_TX_CREATE_MSG = NSS_IF_MAX_MSG_TYPES + 1,
NSS_WIFI_IF_TX_DESTROY_MSG,
NSS_WIFI_IF_STATS_SYNC_MSG,
NSS_WIFI_IF_MAX_MSG_TYPES
};
/**
* nss_wifi_if_error_types
* Error types for the Wi-Fi interface.
*/
enum nss_wifi_if_error_types {
NSS_WIFI_IF_SUCCESS,
NSS_WIFI_IF_CORE_FAILURE,
NSS_WIFI_IF_ALLOC_FAILURE,
NSS_WIFI_IF_DYNAMIC_IF_FAILURE,
NSS_WIFI_IF_MSG_TX_FAILURE,
NSS_WIFI_IF_REG_FAILURE,
NSS_WIFI_IF_CORE_NOT_INITIALIZED
};
/**
* nss_wifi_if_create_msg
* Payload for configuring the Wi-Fi interface.
*/
struct nss_wifi_if_create_msg {
uint32_t flags; /**< Interface flags. */
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
};
/**
* nss_wifi_if_destroy_msg
* Payload for destroying the Wi-Fi interface.
*/
struct nss_wifi_if_destroy_msg {
int32_t reserved; /**< Placeholder. */
};
/**
* nss_wifi_if_stats
* Wi-Fi interface statistics received from the NSS.
*/
struct nss_wifi_if_stats {
struct nss_cmn_node_stats node_stats;
/**< Common statistics. */
uint32_t tx_enqueue_failed;
/**< Number of packets dropped when queuing to the next node in a network graph. */
uint32_t shaper_enqueue_failed;
/**< Number of packets dropped when queuing to the shaper node. */
};
/**
* nss_wifi_if_msg
* Data for sending and receiving Wi-Fi interface messages.
*/
struct nss_wifi_if_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of a Wi-Fi interface message.
*/
union {
union nss_if_msgs if_msgs;
/**< NSS interface messages. */
struct nss_wifi_if_create_msg create;
/**< Creates a Wi-Fi interface rule. */
struct nss_wifi_if_destroy_msg destroy;
/**< Destroys a Wi-Fi interface rule. */
struct nss_wifi_if_stats stats;
/**< Interface statistics. */
} msg; /**< Message payload. */
};
/**
* nss_wifi_if_pvt
* Private data information for the Wi-Fi interface.
*/
struct nss_wifi_if_pvt {
struct semaphore sem;
/**< Semaphore for a specified Wi-Fi interface number. */
struct completion complete;
/**< Waits for the NSS to process a message on the specified Wi-Fi interface. */
int response; /**< Response received on a Wi-Fi interface number. */
int sem_init_done;
/**< Indicates whether the semaphore is initialized. */
};
/**
* Callback function for receiving Wi-Fi data.
*
* @datatypes
* net_device \n
* sk_buff \n
* napi_struct
*
* @param[in] netdev Pointer to the associated network device.
* @param[in] skb Pointer to the data socket buffer.
* @param[in] napi Pointer to the NAPI structure.
*/
typedef void (*nss_wifi_if_data_callback_t)(struct net_device *netdev,
struct sk_buff *skb, struct napi_struct *napi);
/**
* Callback function for receiving Wi-Fi messages.
*
* @datatypes
* nss_cmn_msg
*
* @param[in] app_data Pointer to the application context of the message.
* @param[in] msg Pointer to the message data.
*/
typedef void (*nss_wifi_if_msg_callback_t)(void *app_data,
struct nss_cmn_msg *msg);
/**
* nss_wifi_if_handle
* Context for WLAN-to-NSS communication.
*/
struct nss_wifi_if_handle {
struct nss_ctx_instance *nss_ctx; /**< NSS context. */
int32_t if_num; /**< Interface number. */
struct nss_wifi_if_pvt *pvt; /**< Private data structure. */
struct nss_wifi_if_stats stats;
/**< Statistics corresponding to this handle. */
nss_wifi_if_msg_callback_t cb;
/**< Callback registered by other modules. */
void *app_data;
/**< Application context to be passed to that callback. */
};
/**
* nss_wifi_if_tx_msg
* Sends a message to the Wi-Fi interface.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifi_if_msg
*
* @param[in] nss_ctx Pointer to the NSS context (provided during registration).
* @param[in] nwim Pointer to the Wi-Fi interface message.
*
* @return
* Status of the Tx operation.
*/
extern nss_tx_status_t nss_wifi_if_tx_msg(struct nss_ctx_instance *nss_ctx,
struct nss_wifi_if_msg *nwim);
/**
* nss_wifi_if_register
* Registers a Wi-Fi interface with the NSS driver.
*
* @datatypes
* nss_wifi_if_handle \n
* nss_wifi_if_data_callback_t \n
* net_device
*
* @param[in] handle Pointer to the Wi-Fi context (provided during Wi-Fi
* interface allocation).
* @param[in] rx_callback Callback handler for Wi-Fi data packets.
* @param[in] netdev Pointer to the associated network device.
*
* @return
* None.
*/
extern void nss_wifi_if_register(struct nss_wifi_if_handle *handle,
nss_wifi_if_data_callback_t rx_callback,
struct net_device *netdev);
/**
* nss_wifi_if_unregister
* Deregisters a Wi-Fi interface from the NSS driver.
*
* @datatypes
* nss_wifi_if_handle
*
* @param[in] handle Pointer to the Wi-Fi context.
*
* @return
* None.
*/
extern void nss_wifi_if_unregister(struct nss_wifi_if_handle *handle);
/**
* nss_wifi_if_create_sync
* Creates a Wi-Fi interface.
*
* @datatypes
* net_device
*
* @param[in] netdev Pointer to the associated network device.
*
* @return
* Pointer to the Wi-Fi handle.
*/
extern struct nss_wifi_if_handle *nss_wifi_if_create_sync(struct net_device *netdev);
/**
* nss_wifi_if_destroy_sync
* Destroys the Wi-Fi interface associated with the interface number.
*
* @datatypes
* nss_wifi_if_handle
*
* @param[in] handle Pointer to the Wi-Fi handle.
*
* @return
* Status of the Tx operation.
*/
extern nss_tx_status_t nss_wifi_if_destroy_sync(struct nss_wifi_if_handle *handle);
/**
* nss_wifi_if_tx_buf
* Sends a data packet or buffer to the NSS.
*
* @datatypes
* nss_wifi_if_handle \n
* sk_buff
*
* @param[in] handle Context associated with the interface.
* @param[in] skb Pointer to the data socket buffer.
*
* @return
* Status of the Tx operation.
*/
extern nss_tx_status_t nss_wifi_if_tx_buf(struct nss_wifi_if_handle *handle,
struct sk_buff *skb);
/**
* nss_wifi_if_copy_stats
* Copies Wi-Fi interface statistics for display.
*
* @param[in] if_num NSS interface number.
* @param[in] index Index in the statistics array.
* @param[out] line Pointer to the buffer into which the statistics are copied.
*
* @return
* Number of bytes copied.
*/
int32_t nss_wifi_if_copy_stats(int32_t if_num, int index, char *line);
/**
* @}
*/
#endif /* __NSS_WIFI_IF_H */

View File

@@ -43,6 +43,8 @@ enum nss_wifi_mac_db_msg_types {
NSS_WIFI_MAC_DB_UPDATE_ENTRY_MSG, /**< Wi-Fi MAC database update entry message. */
NSS_WIFI_MAC_DB_DEINIT_MSG, /**< Wi-Fi MAC database deinitialization message. */
NSS_WIFI_MAC_DB_GROUP_ENTRIES_ADD_MSG, /**< Wi-Fi MAC database group entries add message. */
NSS_WIFI_MAC_DB_ENTRY_ACTIVITY_MSG, /**< Wi-Fi MAC database entry activity message. */
NSS_WIFI_MAC_DB_CREATE_ENTRY_MSG, /**< Wi-Fi MAC database entry create message. */
NSS_WIFI_MAC_DB_MAX_MSG
};
@@ -69,9 +71,8 @@ enum nss_wifi_mac_db_if_opmode {
NSS_WIFI_MAC_DB_ENTRY_IF_OPMODE_MAX /**< Maximum entry database interface operation mode. */
};
/*
* nss_wifi_mac_db_err_types
* Wi-Fi MAC database erros.
/**
* Wi-Fi MAC database errors.
*/
enum nss_wifi_mac_db_err_types {
NSS_WIFI_MAC_DB_ERROR_NONE,
@@ -112,12 +113,42 @@ enum nss_wifi_mac_db_err_types {
/**< Wi-Fi MAC database error maximum. */
};
/**
* nss_wifi_mac_db_entry_create_msg
* Wi-Fi MAC database entry create message.
*/
struct nss_wifi_mac_db_entry_create_msg {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t reserved; /**< Reserved bytes. */
int32_t nss_if; /**< NSS interface number. */
};
/**
* nss_wifi_mac_db_entry_activity_info
* Wi-Fi MAC database entry activity information.
*/
struct nss_wifi_mac_db_entry_activity_info {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t reserved; /**< Reserved bytes. */
int32_t nss_if; /**< NSS interface number. */
};
/**
* nss_wifi_mac_db_entry_activity_info_msg
* Wi-Fi MAC database entry activity information message.
*/
struct nss_wifi_mac_db_entry_activity_info_msg {
uint32_t nentries; /**< Number of entries. */
struct nss_wifi_mac_db_entry_activity_info info[1];
/**< Wi-Fi MAC database entry activity information. */
};
/**
* nss_wifi_mac_db_entry_info_msg
* Wi-Fi MAC database entry information.
*/
struct nss_wifi_mac_db_entry_info_msg {
uint8_t mac_addr[6]; /**< MAC address. */
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t flag; /**< Flag information about NSS interface. */
int32_t nss_if; /**< NSS interface number. */
uint32_t iftype; /**< NSS interface type. */
@@ -151,6 +182,10 @@ struct nss_wifi_mac_db_msg {
/**< Wi-Fi MAC database information specific message. */
struct nss_wifi_mac_db_entry_group_info_msg nmfdbegimsg;
/**< Wi-Fi MAC database information specific message. */
struct nss_wifi_mac_db_entry_activity_info_msg nmfdbeact_imsg;
/**< Wi-Fi MAC database entry activity information message. */
struct nss_wifi_mac_db_entry_create_msg nmfdbecmsg;
/**< Wi-Fi MAC database entry create message. */
} msg; /**< Message payload. */
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2015-2021, 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.
@@ -16,7 +16,7 @@
/**
* @file nss_wifi_vdev.h
* NSS TO HLOS Wi-Fi virtual device interface definitions.
* NSS-to-HLOS Wi-Fi virtual device interface definitions.
*/
#ifndef __NSS_WIFI_VDEV_H
@@ -74,6 +74,8 @@ enum nss_wifi_vdev_msg_types {
NSS_WIFI_VDEV_INTERFACE_RECOVERY_RESET_MSG,
NSS_WIFI_VDEV_INTERFACE_RECOVERY_RECONF_MSG,
NSS_WIFI_VDEV_SET_GROUP_KEY,
NSS_WIFI_VDEV_HMMC_MEMBER_ADD_MSG,
NSS_WIFI_VDEV_HMMC_MEMBER_DEL_MSG,
NSS_WIFI_VDEV_MAX_MSG
};
@@ -128,6 +130,15 @@ enum nss_wifi_vdev_err_types {
NSS_WIFI_VDEV_VLAN_MODE_CONFIG_FAIL,
NSS_WIFI_VDEV_RECOVERY_RESET_FAIL,
NSS_WIFI_VDEV_RECOVERY_RECONF_FAIL,
NSS_WIFI_VDEV_CONFIG_GROUP_KEY_FAIL,
NSS_WIFI_VDEV_MULTIPASS_NOT_ENABLED,
NSS_WIFI_VDEV_ALLOC_VLAN_MAP_FAILED,
NSS_WIFI_VDEV_MTU_CHANGE_FAIL,
NSS_WIFI_VDEV_MAC_ADDR_CHANGE_FAIL,
NSS_WIFI_VDEV_PPE_PORT_CREATE_FAIL,
NSS_WIFI_VDEV_PPE_PORT_DESTROY_FAIL,
NSS_WIFI_VDEV_PPE_VSI_ASSIGN_FAIL,
NSS_WIFI_VDEV_PPE_VSI_UNASSIGN_FAIL,
NSS_WIFI_VDEV_EINV_MAX_CFG
};
@@ -150,6 +161,11 @@ enum nss_wifi_vdev_ext_data_pkt_type {
NSS_WIFI_VDEV_EXT_TX_COMPL_PKT_TYPE = 11, /**< Tx completion. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_WDS_LEARN = 12, /**< WDS source port learning command. */
NSS_WIFI_VDEV_EXT_DATA_PPDU_INFO = 13, /**< PPDU metadata information. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MCBC_RX = 14, /**< Multicast/broadcast packet received. */
NSS_WIFI_VDEV_MESH_EXT_DATA_PKT_TYPE_RX_SPL_PACKET = 15,
/**< Mesh link VAP special packet. */
NSS_WIFI_VDEV_MESH_EXT_DATA_PKT_TYPE_RX_MCAST_EXC = 16,
/**< Mesh link VAP multicast packet. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MAX
};
@@ -184,7 +200,10 @@ enum nss_wifi_vdev_cmd {
/**< Configuration to enable HLOS TID override on VAP. */
NSS_WIFI_VDEV_ENABLE_IGMP_ME_CMD, /**< Configuration to set IGMP multicast enhancement on VAP. */
NSS_WIFI_VDEV_CFG_WDS_BACKHAUL_CMD,
/**< Configuration to set WDS backhaul extension on VAP. */
/**< Configuration to set WDS backhaul extension on VAP. */
NSS_WIFI_VDEV_CFG_MCBC_EXC_TO_HOST_CMD, /**< Configuration to set multicast/broadcast exception to host on VAP. */
NSS_WIFI_VDEV_CFG_PEER_AUTHORIZE_CMD,
/**< Configuration to enable peer authorization on VAP. */
NSS_WIFI_VDEV_MAX_CMD
};
@@ -220,6 +239,11 @@ enum nss_wifi_vdev_vlan_tagging_mode {
NSS_WIFI_VDEV_VLAN_MAX /**< Wi-Fi maximum VLAN support type. */
};
enum vap_ext_mode {
WIFI_VDEV_EXT_MODE_MESH_LINK = 1, /* Wi-Fi mesh VAP mode */
WIFI_VDEV_EXT_MODE_MAX, /* Wi-Fi maximum VAP mode */
};
/**
* nss_wifi_vdev_config_msg
* Virtual device configuration.
@@ -246,7 +270,8 @@ struct nss_wifi_vdev_config_msg {
uint8_t is_wrap; /**< Specifies whether the VAP is a WRAP-AP. */
uint8_t is_nss_qwrap_en; /**< VAP is configured for NSS firmware QWRAP logic. */
uint8_t tx_per_pkt_vdev_id_check; /**< Transmit per-packet virtual device ID check. */
uint8_t reserved; /**< Reserved for 4-byte alignment padding. */
uint8_t align_pad; /**< Reserved field. */
uint32_t vap_ext_mode; /**< Different VAP extended modes. */
};
/**
@@ -435,6 +460,66 @@ struct nss_wifi_vdev_me_snptbl_grp_mbr_update_msg {
/**< Source IP address. */
};
/**
* nss_wifi_vdev_me_hmmc_add_msg
* Information for adding an entry into the host-managed multicast list.
*/
struct nss_wifi_vdev_me_hmmc_add_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_hmmc_del_msg
* Information for deleting an entry from the host-managed multicast list.
*/
struct nss_wifi_vdev_me_hmmc_del_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_deny_ip_add_msg
* Information for adding an entry into the deny list.
*/
struct nss_wifi_vdev_me_deny_ip_add_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_deny_ip_del_msg
* Information for deleting an entry from the deny list.
*/
struct nss_wifi_vdev_me_deny_ip_del_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_snptbl_deny_grp_add_msg
* Information for adding a snooplist member to a deny list.
@@ -952,6 +1037,8 @@ struct nss_wifi_vdev_stats_sync_msg {
uint32_t rx_mcast_bytes; /**< Receive multicast bytes count. */
uint32_t rx_decrypt_err; /**< Receive decryption error */
uint32_t rx_mic_err; /**< Receive MIC error */
uint32_t mcbc_exc_host_fail_cnt;
/**< Number of multicast/broadcast packets failed to send to host through exception path. */
};
/**
@@ -982,7 +1069,15 @@ struct nss_wifi_vdev_msg {
struct nss_wifi_vdev_me_snptbl_grp_mbr_update_msg vdev_grp_member_update;
/**< Updates a snooplist group member. */
struct nss_wifi_vdev_me_snptbl_deny_grp_add_msg vdev_deny_member_add;
/**< Adds a snooplist member to a deny list. */
/**< Add a snooplist member to the deny list. */
struct nss_wifi_vdev_me_hmmc_add_msg vdev_hmmc_member_add;
/**< Adds a new member into the HMMC list. */
struct nss_wifi_vdev_me_hmmc_del_msg vdev_hmmc_member_del;
/**< Delete a member from the HMMC list. */
struct nss_wifi_vdev_me_deny_ip_add_msg vdev_deny_list_member_add;
/**< Adds a new member into the deny list. */
struct nss_wifi_vdev_me_deny_ip_del_msg vdev_deny_list_member_del;
/**< Delete a member from the deny list. */
struct nss_wifi_vdev_txmsg vdev_txmsgext;
/**< Transmits special data. */
struct nss_wifi_vdev_vow_dbg_cfg_msg vdev_vow_dbg_cfg;

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2021, 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.
@@ -62,7 +62,7 @@
/**< Maximum number of bandwidth supported. */
#define NSS_WIFILI_REPT_MU_MIMO 1
#define NSS_WIFILI_REPT_MU_OFDMA_MIMO 3
#define NSS_WIFILI_MAX_RESERVED_TYPE 3
#define NSS_WIFILI_MAX_RESERVED_TYPE 2
/**< Maximum reserved type. */
#define NSS_WIFILI_SOC_PER_PACKET_METADATA_SIZE 60
/**< Metadata area total size. */
@@ -95,6 +95,11 @@
#define NSS_WIFILI_WBM_INTERNAL_ERR_MAX 5
/**< WBM internal maximum errors. */
/*
* Peer Size in Bytes
*/
#define NSS_WIFILI_PEER_SIZE 1600
/*
* Radio specific flags
*/
@@ -105,6 +110,27 @@
*/
#define NSS_WIFILI_PEER_MSG_DISABLE_4ADDR 0x01
#ifdef __KERNEL__ /* only kernel will use. */
/**
* Wireless Multimedia Extention Access Category to TID. @hideinitializer
*/
#define NSS_WIFILI_WME_AC_TO_TID(_ac) ( \
((_ac) == NSS_WIFILI_WME_AC_VO) ? 6 : \
(((_ac) == NSS_WIFILI_WME_AC_VI) ? 5 : \
(((_ac) == NSS_WIFILI_WME_AC_BK) ? 1 : \
0)))
/**
* Wireless TID to Wireless Extension Multimedia Access Category. @hideinitializer
*/
#define NSS_WIFILI_TID_TO_WME_AC(_tid) ( \
(((_tid) == 0) || ((_tid) == 3)) ? NSS_WIFILI_WME_AC_BE : \
((((_tid) == 1) || ((_tid) == 2)) ? NSS_WIFILI_WME_AC_BK : \
((((_tid) == 4) || ((_tid) == 5)) ? NSS_WIFILI_WME_AC_VI : \
NSS_WIFILI_WME_AC_VO)))
#endif /* __KERNEL */
/**
* nss_wifili_thread_scheme_id
* List of thread scheme IDs.
@@ -209,6 +235,9 @@ enum nss_wifili_msg_types {
NSS_WIFILI_PEER_EXT_STATS_MSG,
NSS_WIFILI_CLR_STATS,
NSS_WIFILI_PEER_4ADDR_EVENT_MSG,
NSS_WIFILI_DBDC_REPEATER_LOOP_DETECTION_MSG,
NSS_WIFILI_PEER_UPDATE_AUTH_FLAG,
NSS_WIFILI_SEND_MESH_CAPABILITY_INFO,
NSS_WIFILI_MAX_MSG
};
@@ -384,6 +413,7 @@ enum nss_wifili_radio_cmd {
NSS_WIFILI_SET_FORCE_CLIENT_MCAST_TRAFFIC, /**< Flag to force multicast traffic for a radio. */
NSS_WIFILI_SET_DROP_SECONDARY_MCAST, /**< Flag to drop multicast traffic on secondary radio. */
NSS_WIFILI_SET_DBDC_FASTLANE, /**< Flag to set DBDC fast-lane mode. */
NSS_WIFILI_SET_DBDC_NOBACKHAUL_RADIO, /**< Flag to set DBDC to no backhaul radio. */
NSS_WIFILI_RADIO_MAX_CMD /**< Maximum radio command index. */
};
@@ -680,6 +710,8 @@ struct nss_wifili_hal_srng_soc_msg {
/**< Shadow read pointer address. */
uint32_t shadow_wrptr_mem_addr;
/**< Shadow write pointer address. */
uint32_t lmac_rings_start_id;
/**< start id of LMAC rings. */
};
/**
@@ -1308,6 +1340,7 @@ struct nss_wifili_rx_err {
struct nss_wifili_rx_ctrl_stats {
struct nss_wifili_rx_err err; /**< Rx peer errors. */
uint32_t multipass_rx_pkt_drop; /**< Total number of multipass packets without a VLAN header. */
uint32_t peer_unauth_rx_pkt_drop; /**< Number of receive packets dropped due to an authorized peer. */
uint32_t reserved_type[NSS_WIFILI_MAX_RESERVED_TYPE]; /**< Reserved type for future use. */
uint32_t non_amsdu_cnt; /**< Number of MSDUs with no MSDU level aggregation. */
uint32_t amsdu_cnt; /**< Number of MSDUs part of AMSDU. */
@@ -1560,6 +1593,14 @@ struct nss_wifili_peer_isolation_msg {
uint16_t isolation; /**< Isolation enabled/disabled. */
};
/**
* nss_wifili_dbdc_repeater_loop_detection_msg
* Wifili DBDC repeater loop detection message.
*/
struct nss_wifili_dbdc_repeater_loop_detection_msg {
bool dbdc_loop_detected; /**< DBDC repeater loop detection flag. */
};
/**
* nss_wifili_dbdc_repeater_set_msg
* Wifili DBDC repeater set message.
@@ -1612,6 +1653,16 @@ struct nss_wifili_clr_stats_msg {
uint8_t vdev_id;; /**< VAP ID. */
};
/**
* nss_wifili_update_auth_flag
* Peer authentication flag message.
*/
struct nss_wifili_peer_update_auth_flag {
uint16_t peer_id; /**< Peer ID. */
uint8_t auth_flag; /**< Peer authentication flag. */
uint8_t reserved; /**< Alignment padding. */
};
/**
* nss_wifili_update_pdev_lmac_id_msg
* Physical device ID and lower MAC ID update message.
@@ -1670,7 +1721,7 @@ struct nss_wifili_radio_cfg_msg {
/**
* struct wifili_peer_wds_4addr_allow_msg
* Per peer four address configuration message.
* Per-peer four address configuration message.
*/
struct nss_wifili_peer_wds_4addr_allow_msg {
uint32_t peer_id; /**< Peer ID. */
@@ -1678,6 +1729,14 @@ struct nss_wifili_peer_wds_4addr_allow_msg {
bool enable; /**< Boolean flag to enable/disable four address frames. */
};
/**
* struct nss_wifili_mesh_capability_info
* Wi-Fi mesh capability flag.
*/
struct nss_wifili_mesh_capability_info {
bool mesh_enable; /**< Wi-Fi mesh capability flag. */
};
/**
* nss_wifili_msg
* Structure that describes wifili messages.
@@ -1755,7 +1814,13 @@ struct nss_wifili_msg {
struct nss_wifili_clr_stats_msg clrstats;
/**< Clear NSS firmware statistics. */
struct nss_wifili_peer_wds_4addr_allow_msg wpswm;
/**< Peer four address event message. */
/**< Peer four-address event message. */
struct nss_wifili_dbdc_repeater_loop_detection_msg wdrldm;
/**< Wifili DBDC repeater loop detection message. */
struct nss_wifili_peer_update_auth_flag peer_auth;
/**< Peer authentication flag message. */
struct nss_wifili_mesh_capability_info cap_info;
/**< Mesh capability flag. */
} msg; /**< Message payload. */
};
@@ -1900,7 +1965,21 @@ void nss_unregister_wifili_radio_if(uint32_t if_num);
* @return
* External interface number.
*/
uint32_t nss_get_available_wifili_external_if(void);
nss_if_num_t nss_get_available_wifili_external_if(void);
/**
* nss_wifili_release_external_if
* Release the used interface number
*
* @datatypes
* nss_if_num
*
* @param[in] if_num NSS interface number.
*
* @return
* void
*/
void nss_wifili_release_external_if(nss_if_num_t ifnum);
/**
* nss_wifili_thread_scheme_alloc

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2021, 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.
@@ -48,17 +48,33 @@ struct nss_capwap_handle {
};
static struct nss_capwap_handle *nss_capwap_hdl[NSS_MAX_DYNAMIC_INTERFACES];
/*
* nss_capwap_get_interface_type()
* Function to get the type of dynamic interface.
*/
static enum nss_dynamic_interface_type nss_capwap_get_interface_type(uint32_t if_num)
{
struct nss_ctx_instance *nss_ctx;
nss_ctx = &nss_top_main.nss[nss_top_main.capwap_handler_id];
NSS_VERIFY_CTX_MAGIC(nss_ctx);
return nss_dynamic_interface_get_type(nss_ctx, if_num);
}
/*
* nss_capwap_verify_if_num()
* Verify if_num passed to us.
*/
static bool nss_capwap_verify_if_num(uint32_t if_num)
{
enum nss_dynamic_interface_type type;
if (nss_is_dynamic_interface(if_num) == false) {
return false;
}
if (nss_dynamic_interface_get_type(nss_capwap_get_ctx(), if_num) != NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP) {
type = nss_capwap_get_interface_type(if_num);
if ((type != NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_HOST_INNER) && (type != NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_OUTER) ) {
return false;
}
@@ -88,10 +104,10 @@ static void nss_capwap_refcnt_dec(int32_t if_num)
}
/*
* nss_capwap_refcnt()
* nss_capwap_refcnt_get()
* Get refcnt on the tunnel.
*/
static uint32_t nss_capwap_refcnt(int32_t if_num)
static uint32_t nss_capwap_refcnt_get(int32_t if_num)
{
if_num = if_num - NSS_DYNAMIC_IF_START;
return atomic_read(&nss_capwap_hdl[if_num]->refcnt);
@@ -133,45 +149,62 @@ static nss_capwap_msg_callback_t nss_capwap_get_msg_callback(int32_t if_num, voi
}
/*
* nss_capwapmgr_update_stats()
* nss_capwap_update_stats()
* Update per-tunnel stats for each CAPWAP interface.
*/
static void nss_capwapmgr_update_stats(struct nss_capwap_handle *handle, struct nss_capwap_stats_msg *fstats)
static void nss_capwap_update_stats(struct nss_capwap_handle *handle, struct nss_capwap_stats_msg *fstats)
{
struct nss_capwap_tunnel_stats *stats;
enum nss_dynamic_interface_type type;
stats = &handle->stats;
type = nss_capwap_get_interface_type(handle->if_num);
stats->rx_segments += fstats->rx_segments;
stats->dtls_pkts += fstats->dtls_pkts;
switch(type) {
case NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_OUTER:
stats->rx_segments += fstats->rx_segments;
stats->dtls_pkts += fstats->dtls_pkts;
stats->rx_dup_frag += fstats->rx_dup_frag;
stats->rx_oversize_drops += fstats->rx_oversize_drops;
stats->rx_frag_timeout_drops += fstats->rx_frag_timeout_drops;
stats->rx_n2h_drops += fstats->rx_n2h_drops;
stats->rx_n2h_queue_full_drops += fstats->rx_n2h_queue_full_drops;
stats->rx_mem_failure_drops += fstats->rx_mem_failure_drops;
stats->rx_csum_drops += fstats->rx_csum_drops;
stats->rx_malformed += fstats->rx_malformed;
stats->rx_frag_gap_drops += fstats->rx_frag_gap_drops;
stats->rx_dup_frag += fstats->rx_dup_frag;
stats->rx_oversize_drops += fstats->rx_oversize_drops;
stats->rx_frag_timeout_drops += fstats->rx_frag_timeout_drops;
stats->rx_queue_full_drops += fstats->rx_queue_full_drops;
stats->rx_n2h_queue_full_drops += fstats->rx_n2h_queue_full_drops;
stats->rx_mem_failure_drops += fstats->rx_mem_failure_drops;
stats->rx_csum_drops += fstats->rx_csum_drops;
stats->rx_malformed += fstats->rx_malformed;
stats->rx_frag_gap_drops += fstats->rx_frag_gap_drops;
/*
* Update pnode rx stats for OUTER node.
*/
stats->pnode_stats.rx_packets += fstats->pnode_stats.rx_packets;
stats->pnode_stats.rx_bytes += fstats->pnode_stats.rx_bytes;
stats->pnode_stats.rx_dropped += nss_cmn_rx_dropped_sum(&fstats->pnode_stats);
break;
stats->tx_segments += fstats->tx_segments;
stats->tx_queue_full_drops += fstats->tx_queue_full_drops;
stats->tx_mem_failure_drops += fstats->tx_mem_failure_drops;
stats->tx_dropped_sg_ref += fstats->tx_dropped_sg_ref;
stats->tx_dropped_ver_mis += fstats->tx_dropped_ver_mis;
stats->tx_dropped_hroom += fstats->tx_dropped_hroom;
stats->tx_dropped_dtls += fstats->tx_dropped_dtls;
stats->tx_dropped_nwireless += fstats->tx_dropped_nwireless;
case NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_HOST_INNER:
stats->tx_segments += fstats->tx_segments;
stats->tx_queue_full_drops += fstats->tx_queue_full_drops;
stats->tx_mem_failure_drops += fstats->tx_mem_failure_drops;
stats->tx_dropped_sg_ref += fstats->tx_dropped_sg_ref;
stats->tx_dropped_ver_mis += fstats->tx_dropped_ver_mis;
stats->tx_dropped_hroom += fstats->tx_dropped_hroom;
stats->tx_dropped_dtls += fstats->tx_dropped_dtls;
stats->tx_dropped_nwireless += fstats->tx_dropped_nwireless;
/*
* add pnode stats now.
*/
stats->pnode_stats.rx_packets += fstats->pnode_stats.rx_packets;
stats->pnode_stats.rx_bytes += fstats->pnode_stats.rx_bytes;
stats->pnode_stats.rx_dropped += nss_cmn_rx_dropped_sum(&fstats->pnode_stats);
stats->pnode_stats.tx_packets += fstats->pnode_stats.tx_packets;
stats->pnode_stats.tx_bytes += fstats->pnode_stats.tx_bytes;
/*
* Update pnode tx stats for INNER node.
*/
stats->pnode_stats.tx_packets += fstats->pnode_stats.tx_packets;
stats->pnode_stats.tx_bytes += fstats->pnode_stats.tx_bytes;
stats->tx_dropped_inner += nss_cmn_rx_dropped_sum(&fstats->pnode_stats);
break;
default:
nss_warning("%px: Received invalid dynamic interface type: %d", handle, type);
nss_assert(0);
return;
}
/*
* Set to 1 when the tunnel is operating in fast memory.
@@ -217,7 +250,7 @@ static void nss_capwap_msg_handler(struct nss_ctx_instance *nss_ctx, struct nss_
/*
* Update driver statistics and send statistics notifications to the registered modules.
*/
nss_capwapmgr_update_stats(nss_capwap_hdl[if_num], &ntm->msg.stats);
nss_capwap_update_stats(nss_capwap_hdl[if_num], &ntm->msg.stats);
nss_capwap_stats_notify(ncm->interface, nss_ctx->id);
}
}
@@ -262,23 +295,23 @@ static bool nss_capwap_instance_alloc(struct nss_ctx_instance *nss_ctx, uint32_t
memset(h, 0, sizeof(struct nss_capwap_handle));
h->if_num = if_num;
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
if (nss_capwap_hdl[if_num - NSS_DYNAMIC_IF_START] != NULL) {
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
kfree(h);
nss_warning("%px: Another thread is already allocated instance for :%d", nss_ctx, if_num);
return false;
}
nss_capwap_hdl[if_num - NSS_DYNAMIC_IF_START] = h;
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
return true;
}
/*
* nss_capwap_tx_msg()
* Transmit a CAPWAP message to NSS FW. Don't call this from softirq/interrupts.
* Transmit a CAPWAP message to NSS FW. Don't call this from softirq/interrupts.
*/
nss_tx_status_t nss_capwap_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_capwap_msg *msg)
{
@@ -299,14 +332,14 @@ nss_tx_status_t nss_capwap_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_c
}
if_num = msg->cm.interface - NSS_DYNAMIC_IF_START;
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
if (!nss_capwap_hdl[if_num]) {
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
nss_warning("%px: capwap tunnel if_num is not there: %d", nss_ctx, msg->cm.interface);
return NSS_TX_FAILURE_BAD_PARAM;
}
nss_capwap_refcnt_inc(msg->cm.interface);
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
/*
* Trace messages.
@@ -348,14 +381,14 @@ bool nss_capwap_get_stats(uint32_t if_num, struct nss_capwap_tunnel_stats *stats
}
if_num = if_num - NSS_DYNAMIC_IF_START;
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
if (nss_capwap_hdl[if_num] == NULL) {
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
return false;
}
memcpy(stats, &nss_capwap_hdl[if_num]->stats, sizeof(struct nss_capwap_tunnel_stats));
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
return true;
}
EXPORT_SYMBOL(nss_capwap_get_stats);
@@ -376,13 +409,13 @@ struct nss_ctx_instance *nss_capwap_notify_register(uint32_t if_num, nss_capwap_
return NULL;
}
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
if (nss_capwap_hdl[if_num - NSS_DYNAMIC_IF_START] != NULL) {
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
nss_warning("%px: notfiy register tunnel already exists for interface %d", nss_ctx, if_num);
return NULL;
}
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
return nss_ctx;
}
@@ -410,9 +443,9 @@ nss_tx_status_t nss_capwap_notify_unregister(struct nss_ctx_instance *nss_ctx, u
}
index = if_num - NSS_DYNAMIC_IF_START;
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
if (nss_capwap_hdl[index] == NULL) {
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
nss_warning("%px: notify unregister received for unallocated if_num: %d", nss_ctx, if_num);
return NSS_TX_FAILURE_BAD_PARAM;
}
@@ -421,14 +454,14 @@ nss_tx_status_t nss_capwap_notify_unregister(struct nss_ctx_instance *nss_ctx, u
* It's the responsibility of caller to wait and call us again. We return failure saying
* that we can't remove msg handler now.
*/
if (nss_capwap_refcnt(if_num) != 0) {
spin_unlock(&nss_capwap_spinlock);
if (nss_capwap_refcnt_get(if_num) != 0) {
spin_unlock_bh(&nss_capwap_spinlock);
nss_warning("%px: notify unregister tunnel %d: has reference", nss_ctx, if_num);
return NSS_TX_FAILURE_QUEUE;
}
nss_capwap_set_msg_callback(if_num, NULL, NULL);
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
return NSS_TX_SUCCESS;
}
@@ -449,12 +482,12 @@ struct nss_ctx_instance *nss_capwap_data_register(uint32_t if_num, nss_capwap_bu
return NULL;
}
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
if (nss_ctx->subsys_dp_register[if_num].ndev != NULL) {
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
return NULL;
}
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
core_status = nss_core_register_handler(nss_ctx, if_num, nss_capwap_msg_handler, NULL);
if (core_status != NSS_CORE_STATUS_SUCCESS) {
@@ -488,18 +521,18 @@ bool nss_capwap_data_unregister(uint32_t if_num)
return false;
}
spin_lock(&nss_capwap_spinlock);
spin_lock_bh(&nss_capwap_spinlock);
/*
* It's the responsibility of caller to wait and call us again.
*/
if (nss_capwap_refcnt(if_num) != 0) {
spin_unlock(&nss_capwap_spinlock);
if (nss_capwap_refcnt_get(if_num) != 0) {
spin_unlock_bh(&nss_capwap_spinlock);
nss_warning("%px: notify unregister tunnel %d: has reference", nss_ctx, if_num);
return false;
}
h = nss_capwap_hdl[if_num - NSS_DYNAMIC_IF_START];
nss_capwap_hdl[if_num - NSS_DYNAMIC_IF_START] = NULL;
spin_unlock(&nss_capwap_spinlock);
spin_unlock_bh(&nss_capwap_spinlock);
(void) nss_core_unregister_handler(nss_ctx, if_num);

View File

@@ -50,7 +50,7 @@ static ssize_t nss_capwap_stats_encap(char *line, int len, int i, struct nss_cap
tcnt = s->tx_dropped_ver_mis;
break;
case 5:
tcnt = 0;
tcnt = s->tx_dropped_inner;
break;
case 6:
tcnt = s->tx_dropped_hroom;
@@ -114,7 +114,7 @@ static ssize_t nss_capwap_stats_decap(char *line, int len, int i, struct nss_cap
tcnt = s->rx_frag_gap_drops;
break;
case 9:
tcnt = s->rx_queue_full_drops;
tcnt = s->rx_n2h_drops;
return snprintf(line, len, "%s = %llu (n2h = %llu)\n", nss_capwap_strings_decap_stats[i].stats_name, tcnt, s->rx_n2h_queue_full_drops);
case 10:
tcnt = s->rx_n2h_queue_full_drops;
@@ -166,12 +166,22 @@ static ssize_t nss_capwap_stats_read(struct file *fp, char __user *ubuf, size_t
for (; if_num <= max_if_num; if_num++) {
bool isthere;
enum nss_dynamic_interface_type dtype;
if (nss_is_dynamic_interface(if_num) == false) {
continue;
}
if (nss_dynamic_interface_get_type(nss_capwap_get_ctx(), if_num) != NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP) {
dtype = nss_dynamic_interface_get_type(nss_capwap_get_ctx(), if_num);
/*
* Read encap stats from inner node and decap stats from outer node.
*/
if ((type == 1) && (dtype != NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_HOST_INNER)) {
continue;
}
if ((type == 0) && (dtype != NSS_DYNAMIC_INTERFACE_TYPE_CAPWAP_OUTER)) {
continue;
}

View File

@@ -32,7 +32,7 @@ struct nss_stats_info nss_capwap_strings_encap_stats[NSS_CAPWAP_STATS_ENCAP_MAX]
{"tx_segments", NSS_STATS_TYPE_SPECIAL},
{"tx_drop_seg_ref", NSS_STATS_TYPE_DROP},
{"tx_drop_ver_mismatch",NSS_STATS_TYPE_DROP},
{"tx_drop_unalign", NSS_STATS_TYPE_DROP},
{"tx_dropped_inner", NSS_STATS_TYPE_DROP},
{"tx_drop_hroom", NSS_STATS_TYPE_DROP},
{"tx_drop_DTLS", NSS_STATS_TYPE_DROP},
{"tx_drop_nwireless", NSS_STATS_TYPE_DROP},
@@ -69,7 +69,7 @@ struct nss_stats_info nss_capwap_strings_decap_stats[NSS_CAPWAP_STATS_DECAP_MAX]
{"rx_drop_frag_timeout",NSS_STATS_TYPE_DROP},
{"rx_drop_frag_dup", NSS_STATS_TYPE_DROP},
{"rx_drop_frag_gap", NSS_STATS_TYPE_DROP},
{"rx_drop_qfull", NSS_STATS_TYPE_DROP},
{"rx_drop_n2h", NSS_STATS_TYPE_DROP},
{"rx_drop_n2h_qfull", NSS_STATS_TYPE_DROP},
{"rx_drop_mem_fail", NSS_STATS_TYPE_DROP},
{"rx_drop_csum", NSS_STATS_TYPE_DROP},

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2019-2021, 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.
@@ -23,6 +23,7 @@
#include "nss_cmn.h"
#include "nss_tx_rx_common.h"
#include "nss_clmap_stats.h"
#include "nss_clmap_strings.h"
#include "nss_clmap_log.h"
#define NSS_CLMAP_TX_TIMEOUT 3000
@@ -106,6 +107,7 @@ static void nss_clmap_msg_handler(struct nss_ctx_instance *nss_ctx, struct nss_c
switch (nclm->cm.type) {
case NSS_CLMAP_MSG_TYPE_SYNC_STATS:
nss_clmap_stats_sync(nss_ctx, &nclm->msg.stats, ncm->interface);
nss_clmap_stats_notify(nss_ctx, ncm->interface);
break;
}
@@ -336,7 +338,9 @@ EXPORT_SYMBOL(nss_clmap_get_ctx);
*/
void nss_clmap_init()
{
nss_clmap_stats_dentry_create();
sema_init(&clmap_pvt.sem, 1);
init_completion(&clmap_pvt.complete);
nss_clmap_stats_dentry_create();
nss_clmap_strings_dentry_create();
}

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2019-2021, 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.
@@ -15,15 +15,25 @@
*/
#include "nss_tx_rx_common.h"
#include "nss_clmap.h"
#include "nss_clmap_stats.h"
#include "nss_clmap_strings.h"
/*
* Declare atomic notifier data structure for statistics.
*/
ATOMIC_NOTIFIER_HEAD(nss_clmap_stats_notifier);
/*
* Spinlock to protect clmap statistics update/read
*/
DEFINE_SPINLOCK(nss_clmap_stats_lock);
struct nss_clmap_stats *stats_db[NSS_CLMAP_MAX_DEBUG_INTERFACES] = {NULL};
/*
* nss_clmap_interface_type_str
* Clmap interface type string.
* Clmap interface type string.
*/
static char *nss_clmap_interface_type_str[NSS_CLMAP_INTERFACE_TYPE_MAX] = {
"Upstream",
@@ -31,34 +41,23 @@ static char *nss_clmap_interface_type_str[NSS_CLMAP_INTERFACE_TYPE_MAX] = {
};
/*
* nss_clmap_stats_str
* Clmap statistics strings for nss tunnel stats
* nss_clmap_stats_session_unregister
* Unregister debug statistic for clmap session.
*/
static char *nss_clmap_stats_str[NSS_CLMAP_INTERFACE_STATS_MAX] = {
"rx_pkts",
"rx_bytes",
"tx_pkts",
"tx_bytes",
"rx_queue_0_dropped",
"rx_queue_1_dropped",
"rx_queue_2_dropped",
"rx_queue_3_dropped",
"MAC DB look up failed",
"Invalid packet count",
"Headroom drop",
"Next node queue full drop",
"Pbuf alloc failed drop",
"Linear failed drop",
"Shared packet count",
"Ethernet frame error",
"Macdb create requests count",
"Macdb create failures MAC exists count",
"Macdb create failures MAC table full count",
"Macdb destroy requests count",
"Macdb destroy failures MAC not found count",
"Macdb destroy failures MAC unhashed count",
"Macdb flush requests count"
};
void nss_clmap_stats_session_unregister(uint32_t if_num)
{
uint32_t i;
spin_lock_bh(&nss_clmap_stats_lock);
for (i = 0; i < NSS_CLMAP_MAX_DEBUG_INTERFACES; i++) {
if (stats_db[i] && (stats_db[i]->nss_if_num == if_num)) {
kfree(stats_db[i]);
stats_db[i] = NULL;
break;
}
}
spin_unlock_bh(&nss_clmap_stats_lock);
}
/*
* nss_clmap_stats_session_register
@@ -94,25 +93,6 @@ bool nss_clmap_stats_session_register(uint32_t if_num, uint32_t if_type, struct
return stats_status;
}
/*
* nss_clmap_stats_session_unregister
* Unregister debug statistic for clmap session.
*/
void nss_clmap_stats_session_unregister(uint32_t if_num)
{
uint32_t i;
spin_lock_bh(&nss_clmap_stats_lock);
for (i = 0; i < NSS_CLMAP_MAX_DEBUG_INTERFACES; i++) {
if (stats_db[i] && (stats_db[i]->nss_if_num == if_num)) {
kfree(stats_db[i]);
stats_db[i] = NULL;
break;
}
}
spin_unlock_bh(&nss_clmap_stats_lock);
}
/*
* nss_clmap_get_debug_stats()
* Get clmap debug statistics.
@@ -142,12 +122,12 @@ static int nss_clmap_get_debug_stats(struct nss_clmap_stats *stats)
static ssize_t nss_clmap_stats_read(struct file *fp, char __user *ubuf,
size_t sz, loff_t *ppos)
{
uint32_t max_output_lines = 2 + (NSS_CLMAP_INTERFACE_STATS_MAX * NSS_CLMAP_MAX_DEBUG_INTERFACES + 2) + 2;
uint32_t max_output_lines = (NSS_CLMAP_INTERFACE_STATS_MAX * NSS_CLMAP_MAX_DEBUG_INTERFACES) + NSS_STATS_EXTRA_OUTPUT_LINES;
size_t size_al = NSS_STATS_MAX_STR_LENGTH * max_output_lines;
size_t size_wr = 0;
ssize_t bytes_read = 0;
struct net_device *dev;
uint32_t id, i;
uint32_t id;
struct nss_clmap_stats *clmap_stats = NULL;
int interface_cnt;
@@ -171,8 +151,7 @@ static ssize_t nss_clmap_stats_read(struct file *fp, char __user *ubuf,
* Get clmap statistics.
*/
interface_cnt = nss_clmap_get_debug_stats(clmap_stats);
size_wr = scnprintf(lbuf + size_wr, size_al - size_wr,
"\n clmap Interface statistics start:\n\n");
size_wr += nss_stats_banner(lbuf, size_wr, size_al, "clmap stats", NSS_STATS_SINGLE_CORE);
for (id = 0; id < interface_cnt; id++) {
struct nss_clmap_stats *clmsp = clmap_stats + id;
@@ -190,16 +169,10 @@ static ssize_t nss_clmap_stats_read(struct file *fp, char __user *ubuf,
clmsp->nss_if_num, nss_clmap_interface_type_str[clmsp->nss_if_type], dev->name);
dev_put(dev);
for (i = 0; i < NSS_CLMAP_INTERFACE_STATS_MAX; i++) {
size_wr += scnprintf(lbuf + size_wr, size_al - size_wr,
"\t%s = %llu\n", nss_clmap_stats_str[i],
clmsp->stats[i]);
}
size_wr += scnprintf(lbuf + size_wr, size_al - size_wr, "\n");
size_wr += nss_stats_print("clmap", NULL, NSS_STATS_SINGLE_INSTANCE, nss_clmap_strings_stats,
clmsp->stats, NSS_CLMAP_INTERFACE_STATS_MAX, lbuf, size_wr, size_al);
}
size_wr += scnprintf(lbuf + size_wr, size_al - size_wr,
"\n clmap Interface statistics end\n");
bytes_read = simple_read_from_buffer(ubuf, sz, ppos, lbuf, size_wr);
kfree(clmap_stats);
@@ -272,3 +245,52 @@ void nss_clmap_stats_dentry_create(void)
{
nss_stats_create_dentry("clmap", &nss_clmap_stats_ops);
}
/*
* nss_clmap_stats_notify()
* Sends notifications to all the registered modules.
*
* Leverage NSS-FW statistics timing to update Netlink.
*/
void nss_clmap_stats_notify(struct nss_ctx_instance *nss_ctx, uint32_t if_num)
{
struct nss_clmap_stats_notification clmap_stats;
struct nss_clmap_stats *s = NULL;
int i;
spin_lock_bh(&nss_clmap_stats_lock);
for (i = 0; i < NSS_CLMAP_MAX_DEBUG_INTERFACES; i++) {
if (!stats_db[i] || (stats_db[i]->nss_if_num != if_num)) {
continue;
}
s = stats_db[i];
clmap_stats.core_id = nss_ctx->id;
clmap_stats.if_num = if_num;
memcpy(clmap_stats.stats_ctx, s->stats, sizeof(clmap_stats.stats_ctx));
spin_unlock_bh(&nss_clmap_stats_lock);
atomic_notifier_call_chain(&nss_clmap_stats_notifier, NSS_STATS_EVENT_NOTIFY, &clmap_stats);
return;
}
spin_unlock_bh(&nss_clmap_stats_lock);
}
/*
* nss_clmap_stats_unregister_notifier()
* Deregisters statistics notifier.
*/
int nss_clmap_stats_unregister_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_unregister(&nss_clmap_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_clmap_stats_unregister_notifier);
/*
* nss_clmap_stats_register_notifier()
* Registers statistics notifier.
*/
int nss_clmap_stats_register_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_register(&nss_clmap_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_clmap_stats_register_notifier);

View File

@@ -1,6 +1,6 @@
/*
******************************************************************************
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2019, 2021, 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.
@@ -19,51 +19,12 @@
#define NSS_CLMAP_MAX_DEBUG_INTERFACES 2 * NSS_CLMAP_MAX_INTERFACES
/*
* Clmap NSS interface type.
*/
enum nss_clmap_interface_type {
NSS_CLMAP_INTERFACE_TYPE_US,
NSS_CLMAP_INTERFACE_TYPE_DS,
NSS_CLMAP_INTERFACE_TYPE_MAX
};
/*
* Clmap statistic counters.
*/
enum nss_clmap_stats_type {
NSS_CLMAP_INTERFACE_STATS_RX_PKTS,
NSS_CLMAP_INTERFACE_STATS_RX_BYTES,
NSS_CLMAP_INTERFACE_STATS_TX_PKTS,
NSS_CLMAP_INTERFACE_STATS_TX_BYTES,
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_0_DROPPED,
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_1_DROPPED,
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_2_DROPPED,
NSS_CLMAP_INTERFACE_STATS_RX_QUEUE_3_DROPPED,
NSS_CLMAP_INTERFACE_STATS_DROPPED_MACDB_LOOKUP_FAILED,
NSS_CLMAP_INTERFACE_STATS_DROPPED_INVALID_PACKET_SIZE,
NSS_CLMAP_INTERFACE_STATS_DROPPED_LOW_HEADROOM,
NSS_CLMAP_INTERFACE_STATS_DROPPED_NEXT_NODE_QUEUE_FULL,
NSS_CLMAP_INTERFACE_STATS_DROPPED_PBUF_ALLOC_FAILED,
NSS_CLMAP_INTERFACE_STATS_DROPPED_LINEAR_FAILED,
NSS_CLMAP_INTERFACE_STATS_SHARED_PACKET_CNT,
NSS_CLMAP_INTERFACE_STATS_ETHERNET_FRAME_ERROR,
NSS_CLMAP_INTERFACE_STATS_MACDB_CREATE_REQUESTS_CNT,
NSS_CLMAP_INTERFACE_STATS_MACDB_CREATE_MAC_EXISTS_CNT,
NSS_CLMAP_INTERFACE_STATS_MACDB_CREATE_MAC_TABLE_FULL_CNT,
NSS_CLMAP_INTERFACE_STATS_MACDB_DESTROY_REQUESTS_CNT,
NSS_CLMAP_INTERFACE_STATS_MACDB_DESTROY_MAC_NOT_FOUND_CNT,
NSS_CLMAP_INTERFACE_STATS_MACDB_DESTROY_MAC_UNHASHED_CNT,
NSS_CLMAP_INTERFACE_STATS_MACDB_FLUSH_REQUESTS_CNT,
NSS_CLMAP_INTERFACE_STATS_MAX,
};
/*
* Clmap session debug statistics.
*/
struct nss_clmap_stats {
uint64_t stats[NSS_CLMAP_INTERFACE_STATS_MAX];
int32_t if_index;
uint64_t stats[NSS_CLMAP_INTERFACE_STATS_MAX]; /* Clmap statistics. */
int32_t if_index; /* Interface index. */
uint32_t nss_if_num; /* NSS interface number. */
enum nss_clmap_interface_type nss_if_type; /* NSS interface type. */
bool valid;
@@ -72,6 +33,7 @@ struct nss_clmap_stats {
/*
* Clmap statistics APIs.
*/
extern void nss_clmap_stats_notify(struct nss_ctx_instance *nss_ctx, uint32_t if_num);
extern bool nss_clmap_stats_session_register(uint32_t if_num, enum nss_clmap_interface_type if_type, struct net_device *netdev);
extern void nss_clmap_stats_session_unregister(uint32_t if_num);
extern void nss_clmap_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_clmap_stats_msg *stats_msg, uint32_t if_num);

View File

@@ -0,0 +1,73 @@
/*
**************************************************************************
* Copyright (c) 2020-2021, 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 "nss_stats.h"
#include "nss_core.h"
#include "nss_strings.h"
#include "nss_clmap_strings.h"
/*
* nss_clmap_strings_stats
* Clmap statistics strings for nss tunnel stats
*/
struct nss_stats_info nss_clmap_strings_stats[NSS_CLMAP_INTERFACE_STATS_MAX] = {
{"rx_pkts", NSS_STATS_TYPE_COMMON},
{"rx_bytes", NSS_STATS_TYPE_COMMON},
{"tx_pkts", NSS_STATS_TYPE_COMMON},
{"tx_bytes", NSS_STATS_TYPE_COMMON},
{"rx_queue_0_dropped", NSS_STATS_TYPE_DROP},
{"rx_queue_1_dropped", NSS_STATS_TYPE_DROP},
{"rx_queue_2_dropped", NSS_STATS_TYPE_DROP},
{"rx_queue_3_dropped", NSS_STATS_TYPE_DROP},
{"MAC DB look up failed", NSS_STATS_TYPE_SPECIAL},
{"Invalid packet count", NSS_STATS_TYPE_SPECIAL},
{"Headroom drop", NSS_STATS_TYPE_SPECIAL},
{"Next node queue full drop", NSS_STATS_TYPE_SPECIAL},
{"Pbuf alloc failed drop", NSS_STATS_TYPE_SPECIAL},
{"Linear failed drop", NSS_STATS_TYPE_SPECIAL},
{"Shared packet count", NSS_STATS_TYPE_SPECIAL},
{"Ethernet frame error", NSS_STATS_TYPE_SPECIAL},
{"Macdb create requests count", NSS_STATS_TYPE_SPECIAL},
{"Macdb create failures MAC exists count", NSS_STATS_TYPE_SPECIAL},
{"Macdb create failures MAC table full count", NSS_STATS_TYPE_SPECIAL},
{"Macdb destroy requests count", NSS_STATS_TYPE_SPECIAL},
{"Macdb destroy failures MAC not found count", NSS_STATS_TYPE_SPECIAL},
{"Macdb destroy failures MAC unhashed count", NSS_STATS_TYPE_SPECIAL},
{"Macdb flush requests count", NSS_STATS_TYPE_SPECIAL}
};
/*
* nss_clmap_strings_read()
* Read clmap statistics names
*/
static ssize_t nss_clmap_strings_read(struct file *fp, char __user *ubuf, size_t sz, loff_t *ppos)
{
return nss_strings_print(ubuf, sz, ppos, nss_clmap_strings_stats, NSS_CLMAP_INTERFACE_STATS_MAX);
}
/*
* nss_clmap_strings_ops
*/
NSS_STRINGS_DECLARE_FILE_OPERATIONS(clmap);
/*
* nss_clmap_strings_dentry_create()
* Create clmap statistics strings debug entry.
*/
void nss_clmap_strings_dentry_create(void)
{
nss_strings_create_dentry("clmap", &nss_clmap_strings_ops);
}

View File

@@ -0,0 +1,25 @@
/*
***************************************************************************
* Copyright (c) 2020-2021, 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.
***************************************************************************
*/
#ifndef __NSS_CLMAP_STRINGS_H
#define __NSS_CLMAP_STRINGS_H
#include "nss_clmap_stats.h"
extern struct nss_stats_info nss_clmap_strings_stats[NSS_CLMAP_INTERFACE_STATS_MAX];
extern void nss_clmap_strings_dentry_create(void);
#endif /* __NSS_CLMAP_STRINGS_H */

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2021, 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.
@@ -197,8 +197,7 @@ bool nss_cmn_interface_is_redirect(struct nss_ctx_instance *nss_ctx, int32_t int
{
enum nss_dynamic_interface_type type = nss_dynamic_interface_get_type(nss_ctx, interface_num);
return type == NSS_DYNAMIC_INTERFACE_TYPE_WIFI
|| type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H
return type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H
|| type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N
|| type == NSS_DYNAMIC_INTERFACE_TYPE_VIRTIF_DEPRECATED;
}

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2013-2021, 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.
@@ -1064,6 +1064,21 @@ static inline void nss_core_rx_pbuf(struct nss_ctx_instance *nss_ctx, struct n2h
}
}
/*
* nss_core_set_skb_classify()
* Set skb field to avoid ingress shaping.
*/
static inline void nss_core_set_skb_classify(struct sk_buff *nbuf)
{
#ifdef CONFIG_NET_CLS_ACT
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0))
nbuf->tc_verd = SET_TC_NCLS_NSS(nbuf->tc_verd);
#else
skb_set_tc_classify_offload(nbuf);
#endif
#endif
}
/*
* nss_core_handle_nrfrag_skb()
* Handled the processing of fragmented skb's
@@ -1111,20 +1126,16 @@ static inline bool nss_core_handle_nr_frag_skb(struct nss_ctx_instance *nss_ctx,
nbuf->len = payload_len;
nbuf->priority = desc->pri;
/*
* TODO: Remove kernel version check when IGS is ported
*/
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0))
#ifdef CONFIG_NET_CLS_ACT
/*
* Skip the ingress QoS for the packet if the descriptor has
* ingress shaped flag set.
*/
if (unlikely(desc->bit_flags & N2H_BIT_FLAG_INGRESS_SHAPED)) {
nbuf->tc_verd = SET_TC_NCLS_NSS(nbuf->tc_verd);
nss_core_set_skb_classify(nbuf);
}
#endif
#endif
goto pull;
}
@@ -1156,19 +1167,14 @@ static inline bool nss_core_handle_nr_frag_skb(struct nss_ctx_instance *nss_ctx,
nbuf->len = payload_len;
nbuf->priority = desc->pri;
/*
* TODO: Remove kernel version check when IGS is ported
*/
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0))
#ifdef CONFIG_NET_CLS_ACT
/*
* Skip the ingress QoS for the packet if the descriptor has
* ingress shaped flag set.
*/
if (unlikely(desc->bit_flags & N2H_BIT_FLAG_INGRESS_SHAPED)) {
nbuf->tc_verd = SET_TC_NCLS_NSS(nbuf->tc_verd);
nss_core_set_skb_classify(nbuf);
}
#endif
#endif
/*
@@ -1276,19 +1282,14 @@ static inline bool nss_core_handle_linear_skb(struct nss_ctx_instance *nss_ctx,
nbuf->priority = desc->pri;
/*
* TODO: Remove kernel version check when IGS is ported
*/
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0))
#ifdef CONFIG_NET_CLS_ACT
/*
* Skip the ingress QoS for the packet if the descriptor has
* ingress shaped flag set.
*/
if (unlikely(desc->bit_flags & N2H_BIT_FLAG_INGRESS_SHAPED)) {
nbuf->tc_verd = SET_TC_NCLS_NSS(nbuf->tc_verd);
nss_core_set_skb_classify(nbuf);
}
#endif
#endif
/*
@@ -1339,19 +1340,14 @@ static inline bool nss_core_handle_linear_skb(struct nss_ctx_instance *nss_ctx,
nbuf->truesize = desc->payload_len;
nbuf->priority = desc->pri;
/*
* TODO: Remove kernel version check when IGS is ported
*/
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 0))
#ifdef CONFIG_NET_CLS_ACT
/*
* Skip the ingress QoS for the packet if the descriptor has
* ingress shaped flag set.
*/
if (unlikely(desc->bit_flags & N2H_BIT_FLAG_INGRESS_SHAPED)) {
nbuf->tc_verd = SET_TC_NCLS_NSS(nbuf->tc_verd);
nss_core_set_skb_classify(nbuf);
}
#endif
#endif
*head_ptr = nbuf;
@@ -1735,9 +1731,11 @@ static void nss_core_init_nss(struct nss_ctx_instance *nss_ctx, struct nss_if_me
* connections supported by the accelerator.
*/
nss_ipv4_conn_cfg = max_ipv4_conn;
#ifdef NSS_DRV_IPV6_ENABLE
nss_ipv6_conn_cfg = max_ipv6_conn;
nss_ipv4_update_conn_count(max_ipv4_conn);
nss_ipv6_update_conn_count(max_ipv6_conn);
#endif
nss_ipv4_update_conn_count(max_ipv4_conn);
#ifdef NSS_MEM_PROFILE_LOW
/*

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2013-2021, 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.
@@ -568,6 +568,7 @@ struct nss_top_instance {
uint8_t mirror_handler_id;
uint8_t wmdb_handler_id;
uint8_t dma_handler_id;
uint8_t udp_st_handler_id;
/*
* Data/Message callbacks for various interfaces
@@ -903,6 +904,8 @@ struct nss_platform_data {
/* Does this core handle TLS Tunnel ? */
enum nss_feature_enabled mirror_enabled;
/* Does this core handle mirror? */
enum nss_feature_enabled udp_st_enabled;
/* Does this core handle udp st? */
};
#endif

View File

@@ -21,6 +21,8 @@
#include "nss_tx_rx_common.h"
#include "nss_crypto_cmn.h"
#include "nss_crypto_cmn_strings.h"
#include "nss_crypto_cmn_stats.h"
#include "nss_crypto_cmn_log.h"
/*
@@ -94,6 +96,18 @@ static void nss_crypto_cmn_msg_handler(struct nss_ctx_instance *nss_ctx, struct
*/
nss_crypto_cmn_log_rx_msg(nim);
switch (nim->cm.type) {
case NSS_CRYPTO_CMN_MSG_TYPE_SYNC_NODE_STATS:
case NSS_CRYPTO_CMN_MSG_TYPE_SYNC_ENG_STATS:
case NSS_CRYPTO_CMN_MSG_TYPE_SYNC_CTX_STATS:
/*
* Update driver statistics and send statistics
* notification to the registered modules.
*/
nss_crypto_cmn_stats_sync(nss_ctx, &nim->msg.stats);
nss_crypto_cmn_stats_notify(nss_ctx);
break;
}
/*
* Load, Test & call
*/
@@ -357,6 +371,9 @@ void nss_crypto_cmn_register_handler(void)
sema_init(&g_nss_crypto_cmn.sem, 1);
init_completion(&g_nss_crypto_cmn.complete);
nss_core_register_handler(nss_ctx, NSS_CRYPTO_CMN_INTERFACE, nss_crypto_cmn_msg_handler, NULL);
nss_crypto_cmn_stats_dentry_create();
nss_crypto_cmn_strings_dentry_create();
}
/*

View File

@@ -0,0 +1,166 @@
/*
**************************************************************************
* Copyright (c) 2020, 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 "nss_core.h"
#include "nss_crypto_cmn_stats.h"
#include "nss_crypto_cmn_strings.h"
/*
* Declare atomic notifier data structure for statistics.
*/
ATOMIC_NOTIFIER_HEAD(nss_crypto_cmn_stats_notifier);
/*
* Spinlock to protect CRYPTO_CMN statistics update/read
*/
DEFINE_SPINLOCK(nss_crypto_cmn_stats_lock);
/*
* nss_crypto_cmn_stats
* crypto common statistics
*/
uint64_t nss_crypto_cmn_stats[NSS_CRYPTO_CMN_STATS_MAX];
/*
* nss_crypto_cmn_stats_read()
* Read crypto common statistics
*/
static ssize_t nss_crypto_cmn_stats_read(struct file *fp, char __user *ubuf, size_t sz, loff_t *ppos)
{
int32_t i;
/*
* Max output lines = #stats +
* few blank lines for banner printing + Number of Extra outputlines
* for future reference to add new stats
*/
uint32_t max_output_lines = NSS_CRYPTO_CMN_STATS_MAX + NSS_STATS_EXTRA_OUTPUT_LINES;
size_t size_al = NSS_STATS_MAX_STR_LENGTH * max_output_lines;
size_t size_wr = 0;
ssize_t bytes_read = 0;
uint64_t *stats_shadow;
char *lbuf = vzalloc(size_al);
if (unlikely(!lbuf)) {
nss_warning("Could not allocate memory for local statistics buffer");
return -ENOMEM;
}
stats_shadow = vzalloc(NSS_CRYPTO_CMN_STATS_MAX * 8);
if (unlikely(!stats_shadow)) {
nss_warning("Could not allocate memory for local shadow buffer");
vfree(lbuf);
return -ENOMEM;
}
/*
* crypto common statistics
*/
spin_lock_bh(&nss_crypto_cmn_stats_lock);
for (i = 0; i < NSS_CRYPTO_CMN_STATS_MAX; i++)
stats_shadow[i] = nss_crypto_cmn_stats[i];
spin_unlock_bh(&nss_crypto_cmn_stats_lock);
size_wr += nss_stats_banner(lbuf, size_wr, size_al, "crypto_cmn", NSS_STATS_SINGLE_CORE);
size_wr += nss_stats_print("crypto_cmn", NULL, NSS_STATS_SINGLE_INSTANCE, nss_crypto_cmn_strings_stats,
stats_shadow, NSS_CRYPTO_CMN_STATS_MAX, lbuf, size_wr, size_al);
bytes_read = simple_read_from_buffer(ubuf, sz, ppos, lbuf, strlen(lbuf));
vfree(lbuf);
vfree(stats_shadow);
return bytes_read;
}
/*
* nss_crypto_cmn_stats_ops
*/
NSS_STATS_DECLARE_FILE_OPERATIONS(crypto_cmn);
/*
* nss_crypto_cmn_stats_dentry_create()
* Create crypto common statistics debug entry.
*/
void nss_crypto_cmn_stats_dentry_create(void)
{
nss_stats_create_dentry("crypto_cmn", &nss_crypto_cmn_stats_ops);
}
/*
* nss_crypto_cmn_stats_sync()
* Handle the syncing of NSS crypto common statistics.
*/
void nss_crypto_cmn_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_crypto_cmn_stats *nct)
{
int j;
spin_lock_bh(&nss_crypto_cmn_stats_lock);
/*
* Common node stats
*/
nss_crypto_cmn_stats[NSS_STATS_NODE_RX_PKTS] += nct->nstats.rx_packets;
nss_crypto_cmn_stats[NSS_STATS_NODE_RX_BYTES] += nct->nstats.rx_bytes;
nss_crypto_cmn_stats[NSS_STATS_NODE_TX_PKTS] += nct->nstats.tx_packets;
nss_crypto_cmn_stats[NSS_STATS_NODE_TX_BYTES] += nct->nstats.tx_bytes;
for (j = 0; j < NSS_MAX_NUM_PRI; j++)
nss_crypto_cmn_stats[NSS_STATS_NODE_RX_QUEUE_0_DROPPED + j] += nct->nstats.rx_dropped[j];
/*
* crypto common statistics
*/
nss_crypto_cmn_stats[NSS_CRYPTO_CMN_STATS_FAIL_VERSION] += nct->fail_version;
nss_crypto_cmn_stats[NSS_CRYPTO_CMN_STATS_FAIL_CTX] += nct->fail_ctx;
nss_crypto_cmn_stats[NSS_CRYPTO_CMN_STATS_FAIL_DMA] += nct->fail_dma;
spin_unlock_bh(&nss_crypto_cmn_stats_lock);
}
/*
* nss_crypto_cmn_stats_notify()
* Sends notifications to all the registered modules.
*
* Leverage NSS-FW statistics timing to update Netlink.
*/
void nss_crypto_cmn_stats_notify(struct nss_ctx_instance *nss_ctx)
{
struct nss_crypto_cmn_stats_notification crypto_cmn_stats;
crypto_cmn_stats.core_id = nss_ctx->id;
memcpy(crypto_cmn_stats.stats, nss_crypto_cmn_stats, sizeof(crypto_cmn_stats.stats));
atomic_notifier_call_chain(&nss_crypto_cmn_stats_notifier, NSS_STATS_EVENT_NOTIFY, &crypto_cmn_stats);
}
/*
* nss_crypto_cmn_stats_register_notifier()
* Registers statistics notifier.
*/
int nss_crypto_cmn_stats_register_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_register(&nss_crypto_cmn_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_crypto_cmn_stats_register_notifier);
/*
* nss_crypto_cmn_stats_unregister_notifier()
* Deregisters statistics notifier.
*/
int nss_crypto_cmn_stats_unregister_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_unregister(&nss_crypto_cmn_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_crypto_cmn_stats_unregister_notifier);

View File

@@ -0,0 +1,77 @@
/*
******************************************************************************
* Copyright (c) 2020, 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.
* ****************************************************************************
*/
#ifndef __NSS_CRYPTO_CMN_STATS_H
#define __NSS_CRYPTO_CMN_STATS_H
#include <nss_cmn.h>
/**
* nss_crypto_cmn_stats_types
* crypto common transmission node statistics
*/
enum nss_crypto_cmn_stats_types {
NSS_CRYPTO_CMN_STATS_FAIL_VERSION = NSS_STATS_NODE_MAX, /* version mismatch failures */
NSS_CRYPTO_CMN_STATS_FAIL_CTX, /* context related failures */
NSS_CRYPTO_CMN_STATS_FAIL_DMA, /* dma descriptor full */
NSS_CRYPTO_CMN_STATS_MAX, /* Maximum message type */
};
/**
* nss_crypto_cmn_stats_notification
* crypto common transmission statistics structure
*/
struct nss_crypto_cmn_stats_notification {
uint32_t core_id; /* core ID */
uint64_t stats[NSS_CRYPTO_CMN_STATS_MAX]; /* transmission statistics */
};
/*
* crypto common statistics APIs
*/
extern void nss_crypto_cmn_stats_notify(struct nss_ctx_instance *nss_ctx);
extern void nss_crypto_cmn_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_crypto_cmn_stats *nct);
extern void nss_crypto_cmn_stats_dentry_create(void);
/**
* nss_crypto_cmn_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or -2 on failure.
*/
extern int nss_crypto_cmn_stats_register_notifier(struct notifier_block *nb);
/**
* nss_crypto_cmn_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or -2 on failure.
*/
extern int nss_crypto_cmn_stats_unregister_notifier(struct notifier_block *nb);
#endif /* __NSS_CRYPTO_CMN_STATS_H */

View File

@@ -0,0 +1,61 @@
/*
**************************************************************************
* Copyright (c) 2020, 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 "nss_stats.h"
#include "nss_core.h"
#include "nss_strings.h"
#include "nss_crypto_cmn_strings.h"
/*
* nss_crypto_cmn_strings_stats
* crypto common statistics strings.
*/
struct nss_stats_info nss_crypto_cmn_strings_stats[NSS_CRYPTO_CMN_STATS_MAX] = {
{"rx_pkts", NSS_STATS_TYPE_COMMON},
{"rx_byts", NSS_STATS_TYPE_COMMON},
{"tx_pkts", NSS_STATS_TYPE_COMMON},
{"tx_byts", NSS_STATS_TYPE_COMMON},
{"rx_queue[0]_drops", NSS_STATS_TYPE_DROP},
{"rx_queue[1]_drops", NSS_STATS_TYPE_DROP},
{"rx_queue[2]_drops", NSS_STATS_TYPE_DROP},
{"rx_queue[3]_drops", NSS_STATS_TYPE_DROP},
{"fail_version", NSS_STATS_TYPE_SPECIAL},
{"fail_ctx", NSS_STATS_TYPE_SPECIAL},
{"fail_dma", NSS_STATS_TYPE_SPECIAL}
};
/*
* nss_crypto_cmn_strings_read()
* Read crypto common node statistics names
*/
static ssize_t nss_crypto_cmn_strings_read(struct file *fp, char __user *ubuf, size_t sz, loff_t *ppos)
{
return nss_strings_print(ubuf, sz, ppos, nss_crypto_cmn_strings_stats, NSS_CRYPTO_CMN_STATS_MAX);
}
/*
* nss_crypto_cmn_strings_ops
*/
NSS_STRINGS_DECLARE_FILE_OPERATIONS(crypto_cmn);
/*
* nss_crypto_cmn_strings_dentry_create()
* Create crypto common statistics strings debug entry.
*/
void nss_crypto_cmn_strings_dentry_create(void)
{
nss_strings_create_dentry("crypto_cmn", &nss_crypto_cmn_strings_ops);
}

View File

@@ -0,0 +1,25 @@
/*
**************************************************************************
* Copyright (c) 2020, 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.
**************************************************************************
*/
#ifndef __NSS_CRYPTO_CMN_STRINGS_H
#define __NSS_CRYPTO_CMN_STRINGS_H
#include "nss_crypto_cmn_stats.h"
extern struct nss_stats_info nss_crypto_cmn_strings_stats[NSS_CRYPTO_CMN_STATS_MAX];
extern void nss_crypto_cmn_strings_dentry_create(void);
#endif /* __NSS_CRYPTO_CMN_STRINGS_H */

View File

@@ -17,6 +17,22 @@
#include "nss_phys_if.h"
#include <nss_dp_api_if.h>
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0))
#define NSS_DATA_PLANE_SUPPORTED_FEATURES (NETIF_F_HIGHDMA \
| NETIF_F_HW_CSUM \
| NETIF_F_RXCSUM \
| NETIF_F_SG \
| NETIF_F_FRAGLIST \
| (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_UFO))
#else
#define NSS_DATA_PLANE_SUPPORTED_FEATURES (NETIF_F_HIGHDMA \
| NETIF_F_HW_CSUM \
| NETIF_F_RXCSUM \
| NETIF_F_SG \
| NETIF_F_FRAGLIST \
| (NETIF_F_TSO | NETIF_F_TSO6))
#endif
/*
* nss_data_plane_param
*/
@@ -33,5 +49,6 @@ struct nss_data_plane_param {
void nss_data_plane_hal_add_dp_ops(struct nss_dp_data_plane_ops *dp_ops);
void nss_data_plane_hal_register(struct nss_ctx_instance *nss_ctx);
void nss_data_plane_hal_unregister(struct nss_ctx_instance *nss_ctx);
void nss_data_plane_hal_set_features(struct nss_dp_data_plane_ctx *dpc);
uint16_t nss_data_plane_hal_get_mtu_sz(uint16_t mtu);
void nss_data_plane_hal_stats_sync(struct nss_data_plane_param *ndpp, struct nss_phys_if_stats *stats);

View File

@@ -55,6 +55,23 @@ void nss_data_plane_hal_unregister(struct nss_ctx_instance *nss_ctx)
{
}
/*
* nss_data_plane_hal_set_features
*/
void nss_data_plane_hal_set_features(struct nss_dp_data_plane_ctx *dpc)
{
dpc->dev->features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->hw_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->wanted_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
/*
* Synopsys GMAC does not support checksum offload for QinQ VLANs.
* Hence, we do not advertise checksum offload support for VLANs.
*/
dpc->dev->vlan_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES &
(~(NETIF_F_RXCSUM | NETIF_F_HW_CSUM));
}
/*
* nss_data_plane_hal_stats_sync()
*/

View File

@@ -83,6 +83,17 @@ void nss_data_plane_hal_unregister(struct nss_ctx_instance *nss_ctx)
NSS_PTP_EVENT_SERVICE_CODE);
}
/*
* nss_data_plane_hal_set_features
*/
void nss_data_plane_hal_set_features(struct nss_dp_data_plane_ctx *dpc)
{
dpc->dev->features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->hw_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->vlan_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->wanted_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
}
/*
* nss_data_plane_hal_stats_sync()
*/

View File

@@ -83,6 +83,17 @@ void nss_data_plane_hal_unregister(struct nss_ctx_instance *nss_ctx)
NSS_PTP_EVENT_SERVICE_CODE);
}
/*
* nss_data_plane_hal_set_features
*/
void nss_data_plane_hal_set_features(struct nss_dp_data_plane_ctx *dpc)
{
dpc->dev->features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->hw_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->vlan_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->wanted_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
}
/*
* nss_data_plane_hal_stats_sync()
*/

View File

@@ -19,22 +19,6 @@
#include "nss_tx_rx_common.h"
#include "nss_data_plane_hal.h"
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0))
#define NSS_DATA_PLANE_SUPPORTED_FEATURES (NETIF_F_HIGHDMA \
| NETIF_F_HW_CSUM \
| NETIF_F_RXCSUM \
| NETIF_F_SG \
| NETIF_F_FRAGLIST \
| (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_UFO))
#else
#define NSS_DATA_PLANE_SUPPORTED_FEATURES (NETIF_F_HIGHDMA \
| NETIF_F_HW_CSUM \
| NETIF_F_RXCSUM \
| NETIF_F_SG \
| NETIF_F_FRAGLIST \
| (NETIF_F_TSO | NETIF_F_TSO6))
#endif
/*
* nss_data_plane_param
*/
@@ -228,10 +212,7 @@ drop:
*/
static void __nss_data_plane_set_features(struct nss_dp_data_plane_ctx *dpc)
{
dpc->dev->features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->hw_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->vlan_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
dpc->dev->wanted_features |= NSS_DATA_PLANE_SUPPORTED_FEATURES;
nss_data_plane_hal_set_features(dpc);
}
/*

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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
@@ -120,7 +120,7 @@ static void nss_dma_msg_handler(struct nss_ctx_instance *nss_ctx, struct nss_cmn
*/
if (ndm->cm.type == NSS_DMA_MSG_TYPE_SYNC_STATS) {
nss_dma_stats_sync(nss_ctx, &ndm->msg.stats);
nss_dma_stats_notify(nss_ctx);
}
/*

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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
@@ -17,9 +17,15 @@
*/
#include "nss_core.h"
#include "nss_dma.h"
#include "nss_dma_stats.h"
#include "nss_dma_strings.h"
/*
* Declare atomic notifier data structure for statistics.
*/
ATOMIC_NOTIFIER_HEAD(nss_dma_stats_notifier);
/*
* Spinlock to protect DMA statistics update/read
*/
@@ -117,3 +123,41 @@ void nss_dma_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_dma_stats *
spin_unlock_bh(&nss_dma_stats_lock);
}
/*
* nss_dma_stats_notify()
* Sends notifications to all the registered modules.
*
* Leverage NSS-FW statistics timing to update Netlink.
*/
void nss_dma_stats_notify(struct nss_ctx_instance *nss_ctx)
{
struct nss_dma_stats_notification dma_stats;
spin_lock_bh(&nss_dma_stats_lock);
dma_stats.core_id = nss_ctx->id;
memcpy(dma_stats.stats_ctx, nss_dma_stats, sizeof(dma_stats.stats_ctx));
spin_unlock_bh(&nss_dma_stats_lock);
atomic_notifier_call_chain(&nss_dma_stats_notifier, NSS_STATS_EVENT_NOTIFY, &dma_stats);
}
/*
* nss_dma_stats_unregister_notifier()
* Deregisters statistics notifier.
*/
int nss_dma_stats_unregister_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_unregister(&nss_dma_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_dma_stats_unregister_notifier);
/*
* nss_dma_stats_register_notifier()
* Registers statistics notifier.
*/
int nss_dma_stats_register_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_register(&nss_dma_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_dma_stats_register_notifier);

View File

@@ -1,6 +1,6 @@
/*
******************************************************************************
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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
@@ -21,44 +21,10 @@
#include <nss_cmn.h>
/**
* nss_dma_stats_types
* DMA node statistics.
*/
enum nss_dma_stats_types {
NSS_DMA_STATS_NO_REQ = NSS_STATS_NODE_MAX, /**< Request descriptor not available. */
NSS_DMA_STATS_NO_DESC, /**< DMA descriptors not available. */
NSS_DMA_STATS_NEXTHOP, /**< Failed to retrive next hop. */
NSS_DMA_STATS_FAIL_NEXTHOP_QUEUE, /**< Failed to queue next hop. */
NSS_DMA_STATS_FAIL_LINEAR_SZ, /**< Failed to get memory for linearization. */
NSS_DMA_STATS_FAIL_LINEAR_ALLOC, /**< Failed to allocate buffer for linearization. */
NSS_DMA_STATS_FAIL_LINEAR_NO_SG, /**< Skip linearization due to non-SG packet. */
NSS_DMA_STATS_FAIL_SPLIT_SZ, /**< Failed to spliting buffer into multiple buffers. */
NSS_DMA_STATS_FAIL_SPLIT_ALLOC, /**< Failed to allocate buffer for split. */
NSS_DMA_STATS_FAIL_SYNC_ALLOC, /**< Failed to allocate buffer for sending statistics. */
NSS_DMA_STATS_FAIL_CTX_ACTIVE, /**< Failed to queue as the node is not active. */
NSS_DMA_STATS_FAIL_HW_E0, /**< Failed to process in HW, error code E0. */
NSS_DMA_STATS_FAIL_HW_E1, /**< Failed to process in HW, error code E1. */
NSS_DMA_STATS_FAIL_HW_E2, /**< Failed to process in HW, error code E2. */
NSS_DMA_STATS_FAIL_HW_E3, /**< Failed to process in HW, error code E3. */
NSS_DMA_STATS_FAIL_HW_E4, /**< Failed to process in HW, error code E4. */
NSS_DMA_STATS_FAIL_HW_E5, /**< Failed to process in HW, error code E5. */
NSS_DMA_STATS_FAIL_HW_E6, /**< Failed to process in HW, error code E6. */
NSS_DMA_STATS_FAIL_HW_E7, /**< Failed to process in HW, error code E7. */
NSS_DMA_STATS_FAIL_HW_E8, /**< Failed to process in HW, error code E8. */
NSS_DMA_STATS_FAIL_HW_E9, /**< Failed to process in HW, error code E9. */
NSS_DMA_STATS_FAIL_HW_E10, /**< Failed to process in HW, error code E10. */
NSS_DMA_STATS_FAIL_HW_E11, /**< Failed to process in HW, error code E11. */
NSS_DMA_STATS_FAIL_HW_E12, /**< Failed to process in HW, error code E12. */
NSS_DMA_STATS_FAIL_HW_E13, /**< Failed to process in HW, error code E13. */
NSS_DMA_STATS_FAIL_HW_E14, /**< Failed to process in HW, error code E14. */
NSS_DMA_STATS_FAIL_HW_E15, /**< Failed to process in HW, error code E15. */
NSS_DMA_STATS_MAX, /**< Maximum message type. */
};
/*
* DMA statistics APIs
*/
extern void nss_dma_stats_notify(struct nss_ctx_instance *nss_ctx);
extern void nss_dma_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_dma_stats *nds);
extern void nss_dma_stats_dentry_create(void);

View File

@@ -1,6 +1,6 @@
/*
**************************************************************************
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2021, 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.
@@ -16,106 +16,22 @@
#include "nss_tx_rx_common.h"
#include "nss_dtls_cmn_log.h"
#include "nss_dtls_cmn_stats.h"
#include "nss_dtls_cmn_strings.h"
#define NSS_DTLS_CMN_TX_TIMEOUT 3000 /* 3 Seconds */
#define NSS_DTLS_CMN_INTERFACE_MAX_LONG BITS_TO_LONGS(NSS_MAX_NET_INTERFACES)
#define NSS_DTLS_CMN_STATS_MAX_LINES (NSS_STATS_NODE_MAX + 32)
#define NSS_DTLS_CMN_STATS_SIZE_PER_IF (NSS_STATS_MAX_STR_LENGTH * NSS_DTLS_CMN_STATS_MAX_LINES)
/*
* Private data structure.
*/
static struct nss_dtls_cmn_cmn_pvt {
static struct nss_dtls_cmn_pvt {
struct semaphore sem;
struct completion complete;
enum nss_dtls_cmn_error resp;
unsigned long if_map[NSS_DTLS_CMN_INTERFACE_MAX_LONG];
} dtls_cmn_pvt;
/*
* nss_dtls_cmn_stats_sync()
* Update dtls_cmn node statistics.
*/
static void nss_dtls_cmn_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_cmn_msg *ncm)
{
struct nss_dtls_cmn_msg *ndcm = (struct nss_dtls_cmn_msg *)ncm;
struct nss_top_instance *nss_top = nss_ctx->nss_top;
struct nss_dtls_cmn_ctx_stats *msg_stats = &ndcm->msg.stats;
uint64_t *if_stats;
spin_lock_bh(&nss_top->stats_lock);
/*
* Update common node stats,
* Note: DTLS only supports a single queue for RX.
*/
if_stats = nss_top->stats_node[ncm->interface];
if_stats[NSS_STATS_NODE_RX_PKTS] += msg_stats->pkt.rx_packets;
if_stats[NSS_STATS_NODE_RX_BYTES] += msg_stats->pkt.rx_bytes;
if_stats[NSS_STATS_NODE_RX_QUEUE_0_DROPPED] += msg_stats->pkt.rx_dropped[0];
if_stats[NSS_STATS_NODE_TX_PKTS] += msg_stats->pkt.tx_packets;
if_stats[NSS_STATS_NODE_TX_BYTES] += msg_stats->pkt.tx_bytes;
spin_unlock_bh(&nss_top->stats_lock);
}
/*
* nss_dtls_cmn_stats_read()
* Read dtls_cmn node statiistics.
*/
static ssize_t nss_dtls_cmn_stats_read(struct file *fp, char __user *ubuf, size_t sz, loff_t *ppos)
{
struct nss_ctx_instance *nss_ctx = nss_dtls_cmn_get_context();
enum nss_dynamic_interface_type type;
ssize_t bytes_read = 0;
size_t len = 0, size;
uint32_t if_num;
char *buf;
size = NSS_DTLS_CMN_STATS_SIZE_PER_IF * bitmap_weight(dtls_cmn_pvt.if_map, NSS_MAX_NET_INTERFACES);
buf = kzalloc(size, GFP_KERNEL);
if (!buf) {
nss_warning("Could not allocate memory for local statistics buffer");
return 0;
}
/*
* Common node stats for each DTLS dynamic interface.
*/
for_each_set_bit(if_num, dtls_cmn_pvt.if_map, NSS_MAX_NET_INTERFACES) {
type = nss_dynamic_interface_get_type(nss_ctx, if_num);
switch (type) {
case NSS_DYNAMIC_INTERFACE_TYPE_DTLS_CMN_INNER:
len += scnprintf(buf + len, size - len, "\nInner if_num:%03u", if_num);
break;
case NSS_DYNAMIC_INTERFACE_TYPE_DTLS_CMN_OUTER:
len += scnprintf(buf + len, size - len, "\nOuter if_num:%03u", if_num);
break;
default:
len += scnprintf(buf + len, size - len, "\nUnknown(%d) if_num:%03u", type, if_num);
break;
}
len += scnprintf(buf + len, size - len, "\n-------------------\n");
len += nss_stats_fill_common_stats(if_num, NSS_STATS_SINGLE_INSTANCE, buf, len, size - len, "dtls_cmn");
}
bytes_read = simple_read_from_buffer(ubuf, sz, ppos, buf, len);
kfree(buf);
return bytes_read;
}
/*
* nss_dtls_cmn_stats_ops.
*/
NSS_STATS_DECLARE_FILE_OPERATIONS(dtls_cmn)
/*
* nss_dtls_cmn_verify_ifnum()
* Verify if the interface number is a DTLS interface.
@@ -162,8 +78,10 @@ static void nss_dtls_cmn_handler(struct nss_ctx_instance *nss_ctx, struct nss_cm
return;
}
if (ncm->type == NSS_DTLS_CMN_MSG_TYPE_SYNC_STATS)
if (ncm->type == NSS_DTLS_CMN_MSG_TYPE_SYNC_STATS) {
nss_dtls_cmn_stats_sync(nss_ctx, ncm);
nss_dtls_cmn_stats_notify(nss_ctx, ncm->interface);
}
/*
* Update the callback and app_data for NOTIFY messages.
@@ -220,6 +138,15 @@ static void nss_dtls_cmn_callback(void *app_data, struct nss_cmn_msg *ncm)
return;
}
/*
* nss_dtls_cmn_ifmap_get()
* Return DTLS common active interfaces map.
*/
unsigned long *nss_dtls_cmn_ifmap_get(void)
{
return dtls_cmn_pvt.if_map;
}
/*
* nss_dtls_cmn_tx_buf()
* Transmit buffer over DTLS interface.
@@ -519,5 +446,6 @@ void nss_dtls_cmn_register_handler(void)
{
sema_init(&dtls_cmn_pvt.sem, 1);
init_completion(&dtls_cmn_pvt.complete);
nss_stats_create_dentry("dtls_cmn", &nss_dtls_cmn_stats_ops);
nss_dtls_cmn_stats_dentry_create();
nss_dtls_cmn_strings_dentry_create();
}

View File

@@ -0,0 +1,215 @@
/*
***************************************************************************
* Copyright (c) 2020-2021, 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 "nss_core.h"
#include "nss_dtls_cmn.h"
#include "nss_dtls_cmn_stats.h"
#include "nss_dtls_cmn_strings.h"
/*
* Declare atomic notifier data structure for statistics.
*/
ATOMIC_NOTIFIER_HEAD(nss_dtls_cmn_stats_notifier);
/*
* Spinlock to protect dtls common statistics update/read
*/
DEFINE_SPINLOCK(nss_dtls_cmn_stats_lock);
unsigned long *nss_dtls_cmn_ifmap_get(void);
/*
* nss_dtls_cmn_ctx_stats
* dtls common ctx statistics
*/
uint64_t nss_dtls_cmn_ctx_stats[NSS_MAX_NET_INTERFACES][NSS_DTLS_CMN_CTX_STATS_MAX];
/*
* nss_dtls_cmn_stats_iface_type()
* Return a string for each interface type.
*/
static const char *nss_dtls_cmn_stats_iface_type(enum nss_dynamic_interface_type type)
{
switch (type) {
case NSS_DYNAMIC_INTERFACE_TYPE_DTLS_CMN_INNER:
return "dtls_cmn_inner";
case NSS_DYNAMIC_INTERFACE_TYPE_DTLS_CMN_OUTER:
return "dtls_cmn_outer";
default:
return "invalid_interface";
}
}
/*
* nss_dtls_cmn_stats_read()
* Read dtls common node statistics.
*/
static ssize_t nss_dtls_cmn_stats_read(struct file *fp, char __user *ubuf, size_t sz, loff_t *ppos)
{
/*
* Max output lines = #stats +
* few blank lines for banner printing + Number of Extra outputlines
* for future reference to add new stats
*/
uint32_t max_output_lines = NSS_DTLS_CMN_CTX_STATS_MAX + NSS_STATS_EXTRA_OUTPUT_LINES;
size_t size_al = NSS_STATS_MAX_STR_LENGTH * max_output_lines;
struct nss_ctx_instance *nss_ctx = nss_dtls_cmn_get_context();
enum nss_dynamic_interface_type type;
unsigned long *ifmap;
uint64_t *stats_shadow;
ssize_t bytes_read = 0;
size_t size_wr = 0;
uint32_t if_num;
int32_t i;
int count;
char *lbuf;
ifmap = nss_dtls_cmn_ifmap_get();
count = bitmap_weight(ifmap, NSS_MAX_NET_INTERFACES);
if (count) {
size_al = size_al * count;
}
lbuf = vzalloc(size_al);
if (unlikely(!lbuf)) {
nss_warning("Could not allocate memory for local statistics buffer");
return -ENOMEM;
}
stats_shadow = vzalloc(NSS_DTLS_CMN_CTX_STATS_MAX * 8);
if (unlikely(!stats_shadow)) {
nss_warning("Could not allocate memory for local shadow buffer");
vfree(lbuf);
return -ENOMEM;
}
/*
* Common node stats for each DTLS dynamic interface.
*/
size_wr += nss_stats_banner(lbuf, size_wr, size_al, "dtls_cmn stats", NSS_STATS_SINGLE_CORE);
for_each_set_bit(if_num, ifmap, NSS_MAX_NET_INTERFACES) {
type = nss_dynamic_interface_get_type(nss_ctx, if_num);
if ((type != NSS_DYNAMIC_INTERFACE_TYPE_DTLS_CMN_INNER) &&
(type != NSS_DYNAMIC_INTERFACE_TYPE_DTLS_CMN_OUTER)) {
continue;
}
spin_lock_bh(&nss_dtls_cmn_stats_lock);
for (i = 0; i < NSS_DTLS_CMN_CTX_STATS_MAX; i++) {
stats_shadow[i] = nss_dtls_cmn_ctx_stats[if_num][i];
}
spin_unlock_bh(&nss_dtls_cmn_stats_lock);
size_wr += scnprintf(lbuf + size_wr, size_al - size_wr, "\n%s if_num:%03u\n",
nss_dtls_cmn_stats_iface_type(type), if_num);
size_wr += nss_stats_print("dtls_cmn", NULL, NSS_STATS_SINGLE_INSTANCE, nss_dtls_cmn_ctx_stats_str,
stats_shadow, NSS_DTLS_CMN_CTX_STATS_MAX, lbuf, size_wr, size_al);
}
bytes_read = simple_read_from_buffer(ubuf, sz, ppos, lbuf, strlen(lbuf));
vfree(lbuf);
vfree(stats_shadow);
return bytes_read;
}
/*
* nss_dtls_cmn_stats_ops.
*/
NSS_STATS_DECLARE_FILE_OPERATIONS(dtls_cmn);
/*
* nss_dtls_cmn_stats_dentry_create()
* Create dtls common statistics debug entry.
*/
void nss_dtls_cmn_stats_dentry_create(void)
{
nss_stats_create_dentry("dtls_cmn", &nss_dtls_cmn_stats_ops);
}
/*
* nss_dtls_cmn_stats_sync()
* Update dtls common node statistics.
*/
void nss_dtls_cmn_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_cmn_msg *ncm)
{
struct nss_dtls_cmn_msg *ndcm = (struct nss_dtls_cmn_msg *)ncm;
struct nss_dtls_cmn_ctx_stats *ndccs = &ndcm->msg.stats;
uint64_t *ctx_stats;
uint32_t *msg_stats;
uint16_t i = 0;
spin_lock_bh(&nss_dtls_cmn_stats_lock);
msg_stats = (uint32_t *)ndccs;
ctx_stats = nss_dtls_cmn_ctx_stats[ncm->interface];
for (i = 0; i < NSS_DTLS_CMN_CTX_STATS_MAX; i++, ctx_stats++, msg_stats++) {
*ctx_stats += *msg_stats;
}
spin_unlock_bh(&nss_dtls_cmn_stats_lock);
}
/*
* nss_dtls_cmn_stats_notify()
* Sends notifications to all the registered modules.
*
* Leverage NSS-FW statistics timing to update Netlink.
*/
void nss_dtls_cmn_stats_notify(struct nss_ctx_instance *nss_ctx, uint32_t if_num)
{
struct nss_dtls_cmn_stats_notification *dtls_cmn_stats;
dtls_cmn_stats = kmalloc(sizeof(struct nss_dtls_cmn_stats_notification), GFP_ATOMIC);
if (!dtls_cmn_stats) {
nss_warning("Unable to allocate memory for stats notification\n");
return;
}
spin_lock_bh(&nss_dtls_cmn_stats_lock);
dtls_cmn_stats->core_id = nss_ctx->id;
dtls_cmn_stats->if_num = if_num;
memcpy(dtls_cmn_stats->stats_ctx, nss_dtls_cmn_ctx_stats[if_num], sizeof(dtls_cmn_stats->stats_ctx));
spin_unlock_bh(&nss_dtls_cmn_stats_lock);
atomic_notifier_call_chain(&nss_dtls_cmn_stats_notifier, NSS_STATS_EVENT_NOTIFY, dtls_cmn_stats);
kfree(dtls_cmn_stats);
}
/*
* nss_dtls_cmn_stats_unregister_notifier()
* Deregisters statistics notifier.
*/
int nss_dtls_cmn_stats_unregister_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_unregister(&nss_dtls_cmn_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_dtls_cmn_stats_unregister_notifier);
/*
* nss_dtls_cmn_stats_register_notifier()
* Registers statistics notifier.
*/
int nss_dtls_cmn_stats_register_notifier(struct notifier_block *nb)
{
return atomic_notifier_chain_register(&nss_dtls_cmn_stats_notifier, nb);
}
EXPORT_SYMBOL(nss_dtls_cmn_stats_register_notifier);

View File

@@ -0,0 +1,26 @@
/*
****************************************************************************
* Copyright (c) 2020-2021, 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.
****************************************************************************
*/
#ifndef __NSS_DTLS_CMN_STATS_H
#define __NSS_DTLS_CMN_STATS_H
#include <nss_cmn.h>
extern void nss_dtls_cmn_stats_notify(struct nss_ctx_instance *nss_ctx, uint32_t if_num);
extern void nss_dtls_cmn_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_cmn_msg *ncm);
extern void nss_dtls_cmn_stats_dentry_create(void);
#endif /* __NSS_DTLS_CMN_STATS_H */

Some files were not shown because too many files have changed in this diff Show More