From 4330055959d07b7f5501ca376023faba7df6fec3 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sun, 25 Jul 2021 09:02:05 +0200 Subject: [PATCH] ucentral: development update * add support for xBPF driven data planes Signed-off-by: John Crispin --- feeds/ucentral/ucentral-dataplane/Makefile | 34 ++++++ .../files/etc/config/dataplane | 6 + .../files/etc/hotplug.d/iface/80-dataplane | 10 ++ .../files/etc/init.d/dataplane | 19 ++++ .../files/usr/libexec/dataplane.sh | 11 ++ feeds/ucentral/ucentral-schema/Makefile | 2 +- .../etc/ucentral/examples/data-plane.json | 106 ++++++++++++++++++ profiles/ucentral-ap.yml | 2 +- 8 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 feeds/ucentral/ucentral-dataplane/Makefile create mode 100644 feeds/ucentral/ucentral-dataplane/files/etc/config/dataplane create mode 100644 feeds/ucentral/ucentral-dataplane/files/etc/hotplug.d/iface/80-dataplane create mode 100755 feeds/ucentral/ucentral-dataplane/files/etc/init.d/dataplane create mode 100755 feeds/ucentral/ucentral-dataplane/files/usr/libexec/dataplane.sh create mode 100644 feeds/ucentral/ucentral-schema/files/etc/ucentral/examples/data-plane.json diff --git a/feeds/ucentral/ucentral-dataplane/Makefile b/feeds/ucentral/ucentral-dataplane/Makefile new file mode 100644 index 000000000..2eecc27ba --- /dev/null +++ b/feeds/ucentral/ucentral-dataplane/Makefile @@ -0,0 +1,34 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=ucentral-dataplane +PKG_RELEASE:=1 + +PKG_MAINTAINER:=John Crispin + +include $(INCLUDE_DIR)/package.mk + +define Package/ucentral-dataplane + SECTION:=ucentral + CATEGORY:=uCentral + TITLE:=uCentral xBPF loader + DEPENDS:=+tc-full +kmod-ifb @!TARGET_ipq807x +endef + +define Package/ucentral-dataplane/description + Allow loading cBPF and eBPF programs +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) +endef + +define Build/Compile/Default + +endef +Build/Compile = $(Build/Compile/Default) + +define Package/ucentral-dataplane/install + $(CP) ./files/* $(1) +endef + +$(eval $(call BuildPackage,ucentral-dataplane)) diff --git a/feeds/ucentral/ucentral-dataplane/files/etc/config/dataplane b/feeds/ucentral/ucentral-dataplane/files/etc/config/dataplane new file mode 100644 index 000000000..08f798b5a --- /dev/null +++ b/feeds/ucentral/ucentral-dataplane/files/etc/config/dataplane @@ -0,0 +1,6 @@ +#config program 'example' +# option type 'ingress' +# option program '/tmp/ucentral/~1services~1data_plane/ingress_0' + +#config interface 'up0v0' +# list program 'example' diff --git a/feeds/ucentral/ucentral-dataplane/files/etc/hotplug.d/iface/80-dataplane b/feeds/ucentral/ucentral-dataplane/files/etc/hotplug.d/iface/80-dataplane new file mode 100644 index 000000000..dcbdc0dc2 --- /dev/null +++ b/feeds/ucentral/ucentral-dataplane/files/etc/hotplug.d/iface/80-dataplane @@ -0,0 +1,10 @@ +[ "$ACTION" == 'ifup' ] || exit 0 +dev=$(ubus call network.interface.$INTERFACE status | jsonfilter -e '@.l3_device') +program=$(uci get dataplane.$INTERFACE.program) +tc qdisc del dev $dev handle ffff: ingress +tc qdisc add dev $dev handle ffff: ingress +for p in $program; do + path=$(uci get dataplane.$p.program) + [ -f "$path" ] || continue + tc filter add dev $dev parent ffff: bpf obj $path verbose direct-action +done diff --git a/feeds/ucentral/ucentral-dataplane/files/etc/init.d/dataplane b/feeds/ucentral/ucentral-dataplane/files/etc/init.d/dataplane new file mode 100755 index 000000000..551f957e3 --- /dev/null +++ b/feeds/ucentral/ucentral-dataplane/files/etc/init.d/dataplane @@ -0,0 +1,19 @@ +#!/bin/sh /etc/rc.common + +START=19 +USE_PROCD=1 +PROG=/usr/libexec/dataplane.sh + +reload_service() { + restart +} + +service_triggers() { + procd_add_reload_trigger dataplane +} + +start_service() { + procd_open_instance + procd_set_param command "$PROG" + procd_close_instance +} diff --git a/feeds/ucentral/ucentral-dataplane/files/usr/libexec/dataplane.sh b/feeds/ucentral/ucentral-dataplane/files/usr/libexec/dataplane.sh new file mode 100755 index 000000000..ae06bf0eb --- /dev/null +++ b/feeds/ucentral/ucentral-dataplane/files/usr/libexec/dataplane.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +. /lib/functions.sh + +load() { + INTERFACE=$1 ACTION=ifup . /etc/hotplug.d/iface/80-dataplane +} + +config_load dataplane +config_foreach load interface + diff --git a/feeds/ucentral/ucentral-schema/Makefile b/feeds/ucentral/ucentral-schema/Makefile index 5ef9cd9f9..d6302e8d4 100644 --- a/feeds/ucentral/ucentral-schema/Makefile +++ b/feeds/ucentral/ucentral-schema/Makefile @@ -6,7 +6,7 @@ PKG_RELEASE:=1 PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git PKG_SOURCE_PROTO:=git PKG_SOURCE_DATE:=2021-02-15 -PKG_SOURCE_VERSION:=1022c4a364298bfadfc0a1bfaeaa16b3a4792efb +PKG_SOURCE_VERSION:=15ffad87068ce3ef304d6b4cb2f9d6acf5775139 PKG_MAINTAINER:=John Crispin PKG_LICENSE:=BSD-3-Clause diff --git a/feeds/ucentral/ucentral-schema/files/etc/ucentral/examples/data-plane.json b/feeds/ucentral/ucentral-schema/files/etc/ucentral/examples/data-plane.json new file mode 100644 index 000000000..9ca57c0be --- /dev/null +++ b/feeds/ucentral/ucentral-schema/files/etc/ucentral/examples/data-plane.json @@ -0,0 +1,106 @@ +{ + "uuid": 2, + "radios": [ + { + "band": "2G", + "country": "CA", + "channel-mode": "HE", + "channel-width": 80, + "channel": 32 + } + ], + + "interfaces": [ + { + "name": "WAN", + "role": "upstream", + "services": [ "lldp", "data-plane:example" ], + "ethernet": [ + { + "select-ports": [ + "WAN*" + ] + } + ], + "ipv4": { + "addressing": "dynamic" + }, + "ssids": [ + { + "name": "OpenWifi", + "wifi-bands": [ + "2G" + ], + "bss-mode": "ap", + "encryption": { + "proto": "psk2", + "key": "OpenWifi", + "ieee80211w": "optional" + } + } + ] + }, + { + "name": "LAN", + "role": "downstream", + "services": [ "ssh", "lldp" ], + "ethernet": [ + { + "select-ports": [ + "LAN*" + ] + } + ], + "ipv4": { + "addressing": "static", + "subnet": "192.168.1.1/24", + "dhcp": { + "lease-first": 10, + "lease-count": 100, + "lease-time": "6h" + } + }, + "ssids": [ + { + "name": "OpenWifi", + "wifi-bands": [ + "2G" + ], + "bss-mode": "ap", + "encryption": { + "proto": "psk2", + "key": "OpenWifi", + "ieee80211w": "optional" + } + } + ] + + } + ], + "metrics": { + "statistics": { + "interval": 120, + "types": [ "ssids", "lldp", "clients" ] + }, + "health": { + "interval": 120 + } + }, + "services": { + "lldp": { + "describe": "uCentral", + "location": "universe" + }, + "ssh": { + "port": 22 + }, + "data-plane": { + "ingress-filters": [ + { + "name": "example", + "program": "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b25nIGludABfX29mZl90AF9jdXJfY29sdW1uAHVuc2lnbmVkIHNob3J0AF92dGFibGVfb2Zmc2V0AHNpZ25lZCBjaGFyAF9zaG9ydGJ1ZgBfbG9jawBfSU9fbG9ja190AF9vZmZzZXQAbG9uZyBsb25nIGludABfX2ludDY0X3QAX19vZmY2NF90AF9jb2RlY3Z0AF9JT19jb2RlY3Z0AF93aWRlX2RhdGEAX0lPX3dpZGVfZGF0YQBfZnJlZXJlc19saXN0AF9mcmVlcmVzX2J1ZgBfX3BhZDUAbG9uZyB1bnNpZ25lZCBpbnQAc2l6ZV90AF9tb2RlAF91bnVzZWQyAF9JT19GSUxFAEZJTEUAc3Rkb3V0AHVuc2lnbmVkIGludABOb0Vycm9yAFBhY2tldFRvb1Nob3J0AE5vTWF0Y2gAU3RhY2tPdXRPZkJvdW5kcwBIZWFkZXJUb29TaG9ydABQYXJzZXJUaW1lb3V0AFBhcnNlckludmFsaWRBcmd1bWVudABlYnBmX2Vycm9yQ29kZXMAdW5zaWduZWQgY2hhcgB1OAB1MTYAX191MTYAdTMyAF9fdTMyAGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQAdTY0AF9fdTY0AGVicGZfZmlsdGVyAHNrYgBsZW4AcGt0X3R5cGUAbWFyawBxdWV1ZV9tYXBwaW5nAHByb3RvY29sAHZsYW5fcHJlc2VudAB2bGFuX3RjaQB2bGFuX3Byb3RvAHByaW9yaXR5AGluZ3Jlc3NfaWZpbmRleABpZmluZGV4AHRjX2luZGV4AGNiAGhhc2gAdGNfY2xhc3NpZABkYXRhAGRhdGFfZW5kAG5hcGlfaWQAZmFtaWx5AHJlbW90ZV9pcDQAbG9jYWxfaXA0AHJlbW90ZV9pcDYAbG9jYWxfaXA2AHJlbW90ZV9wb3J0AGxvY2FsX3BvcnQAZGF0YV9tZXRhAGZsb3dfa2V5cwBuaG9mZgB0aG9mZgBhZGRyX3Byb3RvAGlzX2ZyYWcAX191OABpc19maXJzdF9mcmFnAGlzX2VuY2FwAGlwX3Byb3RvAG5fcHJvdG8AX19iZTE2AHNwb3J0AGRwb3J0AGlwdjRfc3JjAF9fYmUzMgBpcHY0X2RzdABpcHY2X3NyYwBpcHY2X2RzdABmbGFncwBmbG93X2xhYmVsAGJw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KiBlYnBmX3BhY2tldFN0YXJ0ID0gKCh2b2lkKikobG9uZylza2ItPmRhdGEpOwAgICAgICAgIGlmIChlYnBmX3BhY2tldEVuZCA8IGVicGZfcGFja2V0U3RhcnQgKyBCWVRFUyhlYnBmX3BhY2tldE9mZnNldEluQml0cyArIDExMikpIHsAICAgICAgICBoZHIuZXRoZXJuZXQuZXRoZXJUeXBlID0gKHUxNikoKGxvYWRfaGFsZihlYnBmX3BhY2tldFN0YXJ0LCBCWVRFUyhlYnBmX3BhY2tldE9mZnNldEluQml0cykpKSk7ACAgICAgICAgc3dpdGNoIChoZHIuZXRoZXJuZXQuZXRoZXJUeXBlKSB7ACAgICAgICAgaWYgKGVicGZfcGFja2V0RW5kIDwgZWJwZl9wYWNrZXRTdGFydCArIEJZVEVTKGVicGZfcGFja2V0T2Zmc2V0SW5CaXRzICsgMTYwKSkgewAgICAgICAgIGhkci5pcHY0LnByb3RvY29sID0gKHU4KSgobG9hZF9ieXRlKGVicGZfcGFja2V0U3RhcnQsIEJZVEVTKGVicGZfcGFja2V0T2Zmc2V0SW5CaXRzKSkpKTsAICAgICAgICBzd2l0Y2ggKGhkci5pcHY0LnByb3RvY29sKSB7ACAgICAgICAgaWYgKGVicGZfcGFja2V0RW5kIDwgZWJwZl9wYWNrZXRTdGFydCArIEJZVEVTKGVicGZfcGFja2V0T2Zmc2V0SW5CaXRzICsgMTYpKSB7ACAgICAgICAgaGRyLmljbXAudHlwZSA9ICh1OCkoKGxvYWRfYnl0ZShlYnBmX3BhY2tldFN0YXJ0LCBCWVRFUyhlYnBmX3BhY2tldE9mZnNldEluQml0cykpKSk7ACAgICAgICAgICAgIGhkci5pY21wLmVicGZfdmFsaWQpIHsAICAgICAgICAgICAgaWYgKGhhc1JldHVybmVkKSB7AH0AY2hhcgBfbGljZW5zZQBsaWNlbnNlAGJwZl9mbG93X2tleXMAYnBmX3NvY2sAn+sBACAAAAAAAAAAFAAAABQAAAA8AQAAUAEAAAAAAAAIAAAAgQEAAAEAAAAAAAAAEAAAABAAAACBAQAAEwAAAAAAAACMAQAAqAEAAABsAAAIAAAAjAEAAMcBAAAvqAAAEAAAAIwBAAAAAgAAMaQAABgAAACMAQAANwIAAC/EAQAoAAAAjAEAADcCAAANxAEAMAAAAIwBAACPAgAAKewBAFAAAACMAQAA9gIAAAn8AQBYAAAAjAEAACADAAAvBAEAaAAAAIwBAAAgAwAADQQBAIgAAACMAQAAeAMAACN0AQCYAAAAjAEAANkDAAAJqAEAoAAAAIwBAAD+AwAAL8gAAKgAAACMAQAA/gMAAA3IAACwAAAAjAEAAFUEAAAf2AAAwAAAAIwBAACyBAAADTwCAOAAAACMAQAAAAAAAAAAAADwAAAAjAEAANUEAAARVAIA+AAAAIwBAAAAAAAAAAAAABgBAACMAQAA9AQAAAGQAgAAAAAAAAwAAAD/////BAAIAAh8CwAUAAAAAAAAAAAAAAAAAAAAIAEAAAAAAAAwAgAABACpAQAACAEB+w4NAAEBAQEAAAABAAABL3Vzci9pbmNsdWRlL3g4Nl82NC1saW51eC1nbnUvYml0cy90eXBlcwAvdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudS9iaXRzAC91c3IvbGliL2xsdm0tMTEvbGliL2NsYW5nLzExLjAuMC9pbmNsdWRlAC91c3IvaW5jbHVkZQBwNGMvYmFja2VuZHMvZWJwZi9ydW50aW1lAC91c3IvaW5jbHVkZS9hc20tZ2VuZXJpYwBwNGMvYmFja2VuZHMvZWJwZi9ydW50aW1lL2NvbnRyaWIvbGliYnBmL2luY2x1ZGUvdWFwaS9saW51eAAvdXNyL2luY2x1ZGUvbGludXgALgAAZWJwZi10ZXN0LmMAAAAAc3RydWN0X0ZJTEUuaAABAAB0eXBlcy5oAAIAAHN0ZGRlZi5oAAMAAEZJTEUuaAABAABzdGRpby5oAAQAAGVicGZfY29tbW9uLmgABQAAaW50LWxsNjQuaAAGAABicGYuaAAHAAB0eXBlcy5oAAgAAGVicGYtdGVzdC5oAAkAAAAACQIAAAAAAAAAAAMaAQUvCgMPIAUxHwUvA8gAIAUNBi4FKQYDCiAFCU4FLwNCIAUNBi4Dv38gBSMGA90APAYDo38gBQkGA+oAIAUvA0ggBQ0GIAUfBiQGA0ogBQ0GA48BIAYD8X4uBREGA5UBSgUABgPrfiAFAQYDpAFKAgEAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlwAAAAQA8f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAsAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA4AAAAAAAAAAAAAAAAAAAAAAAAAAAACgBIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBRAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBWAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBWAgAAAAAAAAAAAAAAAAAAAAAAAAAACgBNAgAAAAAAAAAAAAAAAAAAAAAAAAAACgBwAAAAAAAAAAAAAAAAAAAAAAAAAAAACgB7AAAAAAAAAAAAAAAAAAAAAAAAAAAACgCIAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCVAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCjAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCyAAAAAAAAAAAAAAAAAAAAAAAAAAAACgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgDOAAAAAAAAAAAAAAAAAAAAAAAAAAAACgDbAAAAAAAAAAAAAAAAAAAAAAAAAAAACgDnAAAAAAAAAAAAAAAAAAAAAAAAAAAACgD1AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAFAQAAAAAAAAAAAAAAAAAAAAAAAAAACgASAQAAAAAAAAAAAAAAAAAAAAAAAAAACgAmAQAAAAAAAAAAAAAAAAAAAAAAAAAACgAtAQAAAAAAAAAAAAAAAAAAAAAAAAAACgA1AQAAAAAAAAAAAAAAAAAAAAAAAAAACgA9AQAAAAAAAAAAAAAAAAAAAAAAAAAACgBaAQAAAAAAAAAAAAAAAAAAAAAAAAAACgB1AQAAAAAAAAAAAAAAAAAAAAAAAAAACgCQAQAAAAAAAAAAAAAAAAAAAAAAAAAACgCaAQAAAAAAAAAAAAAAAAAAAAAAAAAACgCrAQAAAAAAAAAAAAAAAAAAAAAAAAAACgDVAQAAAAAAAAAAAAAAAAAAAAAAAAAACgDqAQAAAAAAAAAAAAAAAAAAAAAAAAAACgADAgAAAAAAAAAAAAAAAAAAAAAAAAAACgARAgAAAAAAAAAAAAAAAAAAAAAAAAAACgAeAgAAAAAAAAAAAAAAAAAAAAAAAAAACgA+AgAAAAAAAAAAAAAAAAAAAAAAAAAACgBEAgAAAAAAAAAAAAAAAAAAAAAAAAAACgB3AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAbAQAAAAAAAAAAAAAAAAAAAAAAAAAACgBSAQAAAAAAAAAAAAAAAAAAAAAAAAAACgBJAQAAAAAAAAAAAAAAAAAAAAAAAAAACgBmAQAAAAAAAAAAAAAAAAAAAAAAAAAACgCEAQAAAAAAAAAAAAAAAAAAAAAAAAAACgCgAQAAAAAAAAAAAAAAAAAAAAAAAAAACgDLAQAAAAAAAAAAAAAAAAAAAAAAAAAACgDBAQAAAAAAAAAAAAAAAAAAAAAAAAAACgCzAQAAAAAAAAAAAAAAAAAAAAAAAAAACgDeAQAAAAAAAAAAAAAAAAAAAAAAAAAACgD1AQAAAAAAAAAAAAAAAAAAAAAAAAAACgA3AgAAAAAAAAAAAAAAAAAAAAAAAAAACgAlAgAAAAAAAAAAAAAAAAAAAAAAAAAACgBbAgAAAAAAAAAAAAAAAAAAAAAAAAAACgDSAgAAAAAAAAAAAAAAAAAAAAAAAAAACgBvAgAAAAAAAAAAAAAAAAAAAAAAAAAACgB3AgAAAAAAAAAAAAAAAAAAAAAAAAAACgCGAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCOAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCfAgAAAAAAAAAAAAAAAAAAAAAAAAAACgCuAgAAAAAAAAAAAAAAAAAAAAAAAAAACgC8AgAAAAAAAAAAAAAAAAAAAAAAAAAACgBiAgAAAAAAAAAAAAAAAAAAAAAAAAAACgDwAgAAAAAAAAAAAAAAAAAAAAAAAAAACgDiAgAAAAAAAAAAAAAAAAAAAAAAAAAACgDzAgAAAAAAAAAAAAAAAAAAAAAAAAAACgD3AgAAAAAAAAAAAAAAAAAAAAAAAAAACgD9AgAAAAAAAAAAAAAAAAAAAAAAAAAACgABAwAAAAAAAAAAAAAAAAAAAAAAAAAACgAeAwAAAAAAAAAAAAAAAAAAAAAAAAAACgAHAwAAAAAAAAAAAAAAAAAAAAAAAAAACgAiAwAAAAAAAAAAAAAAAAAAAAAAAAAACgAoAwAAAAAAAAAAAAAAAAAAAAAAAAAACgA0AwAAAAAAAAAAAAAAAAAAAAAAAAAACgBcBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAGBgAAAAAAAAAAAAAAAAAAAAAAAAAACgAVBgAAAAAAAAAAAAAAAAAAAAAAAAAACgAyBgAAAAAAAAAAAAAAAAAAAAAAAAAACgBKBgAAAAAAAAAAAAAAAAAAAAAAAAAACgBZBgAAAAAAAAAAAAAAAAAAAAAAAAAACgBjBgAAAAAAAAAAAAAAAAAAAAAAAAAACgBoBgAAAAAAAAAAAAAAAAAAAAAAAAAACgCxBgAAAAAAAAAAAAAAAAAAAAAAAAAACgCFBgAAAAAAAAAAAAAAAAAAAAAAAAAACgCLBgAAAAAAAAAAAAAAAAAAAAAAAAAACgCWBgAAAAAAAAAAAAAAAAAAAAAAAAAACgChBgAAAAAAAAAAAAAAAAAAAAAAAAAACgCoBgAAAAAAAAAAAAAAAAAAAAAAAAAACgC/BgAAAAAAAAAAAAAAAAAAAAAAAAAACgB5BgAAAAAAAAAAAAAAAAAAAAAAAAAACgC7BgAAAAAAAAAAAAAAAAAAAAAAAAAACgBSBQAAAAAAAAAAAAAAAAAAAAAAAAAACgA4AwAAAAAAAAAAAAAAAAAAAAAAAAAACgA8AwAAAAAAAAAAAAAAAAAAAAAAAAAACgBFAwAAAAAAAAAAAAAAAAAAAAAAAAAACgBKAwAAAAAAAAAAAAAAAAAAAAAAAAAACgBYAwAAAAAAAAAAAAAAAAAAAAAAAAAACgBhAwAAAAAAAAAAAAAAAAAAAAAAAAAACgBuAwAAAAAAAAAAAAAAAAAAAAAAAAAACgB3AwAAAAAAAAAAAAAAAAAAAAAAAAAACgCCAwAAAAAAAAAAAAAAAAAAAAAAAAAACgCLAwAAAAAAAAAAAAAAAAAAAAAAAAAACgCbAwAAAAAAAAAAAAAAAAAAAAAAAAAACgCjAwAAAAAAAAAAAAAAAAAAAAAAAAAACgCsAwAAAAAAAAAAAAAAAAAAAAAAAAAACgCvAwAAAAAAAAAAAAAAAAAAAAAAAAAACgC0AwAAAAAAAAAAAAAAAAAAAAAAAAAACgC/AwAAAAAAAAAAAAAAAAAAAAAAAAAACgDEAwAAAAAAAAAAAAAAAAAAAAAAAAAACgDNAwAAAAAAAAAAAAAAAAAAAAAAAAAACgDVAwAAAAAAAAAAAAAAAAAAAAAAAAAACgDcAwAAAAAAAAAAAAAAAAAAAAAAAAAACgDnAwAAAAAAAAAAAAAAAAAAAAAAAAAACgDxAwAAAAAAAAAAAAAAAAAAAAAAAAAACgD8AwAAAAAAAAAAAAAAAAAAAAAAAAAACgAGBAAAAAAAAAAAAAAAAAAAAAAAAAAACgASBAAAAAAAAAAAAAAAAAAAAAAAAAAACgAdBAAAAAAAAAAAAAAAAAAAAAAAAAAACgAnBAAAAAAAAAAAAAAAAAAAAAAAAAAACgDaBAAAAAAAAAAAAAAAAAAAAAAAAAAACgDhBAAAAAAAAAAAAAAAAAAAAAAAAAAACgDqBAAAAAAAAAAAAAAAAAAAAAAAAAAACgDzBAAAAAAAAAAAAAAAAAAAAAAAAAAACgBJBQAAAAAAAAAAAAAAAAAAAAAAAAAACgDMBAAAAAAAAAAAAAAAAAAAAAAAAAAACgAxBAAAAAAAAAAAAAAAAAAAAAAAAAAACgA3BAAAAAAAAAAAAAAAAAAAAAAAAAAACgA9BAAAAAAAAAAAAAAAAAAAAAAAAAAACgBIBAAAAAAAAAAAAAAAAAAAAAAAAAAACgBVBAAAAAAAAAAAAAAAAAAAAAAAAAAACgBjBAAAAAAAAAAAAAAAAAAAAAAAAAAACgBsBAAAAAAAAAAAAAAAAAAAAAAAAAAACgB1BAAAAAAAAAAAAAAAAAAAAAAAAAAACgCEBAAAAAAAAAAAAAAAAAAAAAAAAAAACgCKBAAAAAAAAAAAAAAAAAAAAAAAAAAACgCQBAAAAAAAAAAAAAAAAAAAAAAAAAAACgCgBAAAAAAAAAAAAAAAAAAAAAAAAAAACgCpBAAAAAAAAAAAAAAAAAAAAAAAAAAACgCyBAAAAAAAAAAAAAAAAAAAAAAAAAAACgC7BAAAAAAAAAAAAAAAAAAAAAAAAAAACgDBBAAAAAAAAAAAAAAAAAAAAAAAAAAACgBQBAAAAAAAAAAAAAAAAAAAAAAAAAAACgB9BAAAAAAAAAAAAAAAAAAAAAAAAAAACgCZBAAAAAAAAAAAAAAAAAAAAAAAAAAACgBABQAAAAAAAAAAAAAAAAAAAAAAAAAACgD2BAAAAAAAAAAAAAAAAAAAAAAAAAAACgADBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAIBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAQBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAYBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAhBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAqBQAAAAAAAAAAAAAAAAAAAAAAAAAACgAyBQAAAAAAAAAAAAAAAAAAAAAAAAAACgA6BQAAAAAAAAAAAAAAAAAAAAAAAAAACgD+BQAAAAAAAAAAAAAAAAAAAAAAAAAACgBgBQAAAAAAAAAAAAAAAAAAAAAAAAAACgCZBQAAAAAAAAAAAAAAAAAAAAAAAAAACgDtBQAAAAAAAAAAAAAAAAAAAAAAAAAACgCOBQAAAAAAAAAAAAAAAAAAAAAAAAAACgBpBQAAAAAAAAAAAAAAAAAAAAAAAAAACgBxBQAAAAAAAAAAAAAAAAAAAAAAAAAACgB5BQAAAAAAAAAAAAAAAAAAAAAAAAAACgCDBQAAAAAAAAAAAAAAAAAAAAAAAAAACgDmBQAAAAAAAAAAAAAAAAAAAAAAAAAACgCeBQAAAAAAAAAAAAAAAAAAAAAAAAAACgCmBQAAAAAAAAAAAAAAAAAAAAAAAAAACgCqBQAAAAAAAAAAAAAAAAAAAAAAAAAACgCzBQAAAAAAAAAAAAAAAAAAAAAAAAAACgC8BQAAAAAAAAAAAAAAAAAAAAAAAAAACgDLBQAAAAAAAAAAAAAAAAAAAAAAAAAACgDWBQAAAAAAAAAAAAAAAAAAAAAAAAAACgDaBQAAAAAAAAAAAAAAAAAAAAAAAAAACgD3BQAAAAAAAAAAAAAAAAAAAAAAAAAACgDyBQAAAAAAAAAAAAAAAAAA0gAAAAAAAwAIAQAAAAAAAAAAAAAAAAAAygAAAAAAAwAYAQAAAAAAAAAAAAAAAAAAwwAAAAAAAwDYAAAAAAAAAAAAAAAAAAAAvAAAAAAAAwDwAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEQAAAAAAAAAAAAAAAAAAAAAAYgAAABEABAAAAAAAAAAAAAQAAAAAAAAAOwAAABIAAwAAAAAAAAAAACABAAAAAAAABgAAAAAAAAAKAAAAtQAAAAwAAAAAAAAACgAAAAIAAAASAAAA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AAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAtwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEBcAAAAAAAArCAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAALMAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAEhBAAAAAAAAEAAAAAAAAAATAAAACwAAAAgAAAAAAAAAEAAAAAAAAAAZAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA7HwAAAAAAAHABAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAFQAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAWEEAAAAAAABAAQAAAAAAABMAAAANAAAACAAAAAAAAAAQAAAAAAAAAH8AAAABAAAAAAAAAAAAAAAAAAAAAAAAALAgAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAB7AAAACQAAAAAAAAAAAAAAAAAAAAAAAACYQgAAAAAAACAAAAAAAAAAEwAAAA8AAAAIAAAAAAAAABAAAAAAAAAAbwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA2CAAAAAAAAA0AgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAGsAAAAJAAAAAAAAAAAAAAAAAAAAAAAAALhCAAAAAAAAEAAAAAAAAAATAAAAEQAAAAgAAAAAAAAAEAAAAAAAAACrAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAQIwAAAAAAAIgRAAAAAAAAAQAAALkAAAAIAAAAAAAAABgAAAAAAAAA" + } + ] + } + } +} diff --git a/profiles/ucentral-ap.yml b/profiles/ucentral-ap.yml index 9cc36ac24..5cd8a5269 100644 --- a/profiles/ucentral-ap.yml +++ b/profiles/ucentral-ap.yml @@ -30,11 +30,11 @@ packages: - ratelimit - rtty-openssl - sqm-scripts - - tc-full - tcpdump - tip-defaults - tmate - ucentral-client + - ucentral-dataplane - ucentral-event - ucentral-schema - ucentral-wifi