Compare commits

...

460 Commits

Author SHA1 Message Date
Hemlata
9a01d85693 Dectmngr: add a uci option dect.global.log_level for log level configuration 2022-03-01 16:19:42 +01:00
Jakob Olsson
4a53405944 map-agent: 7.1.10 2022-03-01 13:14:44 +01:00
Jakob Olsson
f4175d1056 wfadatad: 6.10.13 2022-03-01 11:13:43 +01:00
sverma
ca89942898 wfadatad: 6.10.12 2022-02-28 15:03:18 +00:00
Filip Matusiak
719ef4d172 map-controller: update encryption options in script 2022-02-28 15:19:16 +01:00
Jakob Olsson
be0c9d79b0 map-controller: 6.0.5 2022-02-28 14:42:43 +01:00
Jakob Olsson
72ecd3d35e ieee1905: 4.6.19 2022-02-28 14:42:01 +01:00
Yalu Zhang
445cfef73e Update package endptmngr
Change the way to configure tx/rx gain
2022-02-28 11:42:59 +01:00
Anjan Chanda
e398b994da wfadatad: 6.10.11 2022-02-26 08:54:21 +01:00
Jakob Olsson
2cddf06c61 map-agent: 7.1.9 2022-02-25 17:29:33 +01:00
Anjan Chanda
f42b9b4a62 wfadatad: 6.10.10 2022-02-25 15:46:41 +01:00
Jakob Olsson
e3dcdd6c4d ieee1905: 4.6.18 2022-02-25 15:20:09 +01:00
Jakob Olsson
acac9f08d2 ieee1905: 4.6.17 2022-02-25 14:23:11 +01:00
Jakob Olsson
3f5708e292 map-topology: 3.2.5 2022-02-25 12:42:21 +01:00
Jakob Olsson
c49e2ed7de map-agent: 7.1.8 2022-02-24 15:48:30 +01:00
vdutta
70a000f674 sulu: Deploy config parameters in json 2022-02-23 18:50:06 +01:00
Anjan Chanda
4748533fa2 map-controller: 6.0.4: add Config.in 2022-02-23 18:35:08 +01:00
Jakob Olsson
ad1966b1ba map-controller: 6.0.4 2022-02-23 18:30:56 +01:00
Jakob Olsson
89b367fcf4 map-agent: 7.1.7 2022-02-23 18:27:15 +01:00
Stanislaw Gruszka
3bec20d547 multi-ap: ts rework for eth suport 2022-02-23 18:26:41 +01:00
Anjan Chanda
dde30f9d4a map-agent: 7.1.6 2022-02-23 17:54:53 +01:00
Anjan Chanda
f93ba6ec61 map-agent: 7.1.5 2022-02-23 16:52:47 +01:00
Jakob Olsson
13b3bdde7e easy-soc-libs: 6.4.40 2022-02-23 14:39:16 +01:00
Stanislaw Gruszka
1ccd68992f wfadatad: 6.10.6 2022-02-23 13:30:29 +01:00
Nevadita
3ddbb176aa map-topology: 3.2.4 2022-02-23 13:04:40 +01:00
Anjan Chanda
bea0ee5aa5 ieee1905: 4.6.16 2022-02-23 11:36:53 +01:00
Jakob Olsson
d30a942adb map-agent: 7.1.4 2022-02-22 16:01:50 +01:00
vdutta
f53496233d bbf: 6.4.27
- Ticket refs #7349: Failed to re-created lan interface
- bbf: Operate commands exposed from json file not working properly
2022-02-22 20:07:21 +05:30
Jakob Olsson
a8f3bea932 map-controller: 6.0.3 2022-02-22 11:28:05 +01:00
Jakob Olsson
95dd997cc9 map-agent: 7.1.3 2022-02-22 11:27:28 +01:00
Jakob Olsson
62eb925e8c map-agent: multiap: retain wps credentials in ieee1905 config 2022-02-22 11:24:20 +01:00
Jakob Olsson
3b6e2ad2d7 map-agent: 7.1.2 2022-02-21 17:17:50 +01:00
sverma
3199e091c4 wfadatad: 6.10.5 2022-02-21 15:01:31 +01:00
Jakob Olsson
723be11ebc map-controller: 6.0.2 2022-02-21 12:46:43 +01:00
Jakob Olsson
6c6a81bacb map-agent: 7.1.1 2022-02-18 15:44:16 +01:00
Jakob Olsson
8dc5820987 map-controller: 6.0.1 2022-02-18 15:22:55 +01:00
Jakob Olsson
60e0730a6d map-topology: 3.2.3 2022-02-18 15:12:30 +01:00
Jakob Olsson
aed486f1f9 ieee1905: 4.6.10 2022-02-18 12:47:50 +01:00
Filip Matusiak
f2c11f12c3 map-topology: validate config options 2022-02-18 12:00:00 +01:00
Filip Matusiak
b71fecbb6a ieee1905: validate config options 2022-02-18 12:00:00 +01:00
Filip Matusiak
76310d7e6e map-agent: validate config options 2022-02-18 12:00:00 +01:00
Filip Matusiak
eac345c3e3 map-controller: validate config options 2022-02-18 12:00:00 +01:00
Arun Muthusamy
9570193737 qosmngr: Rearrange queue and shaper function call execution order 2022-02-18 09:50:01 +00:00
vdutta
c1d8341be7 bbf: 6.4.26 2022-02-18 14:17:30 +05:30
Jakob Olsson
ae033eb05e map-agent: 7.1.0 2022-02-17 16:47:53 +01:00
Jakob Olsson
e16b9c7a0e map-controller: 6.0.0 2022-02-17 16:47:03 +01:00
Anjan Chanda
53fb4d46c1 ieee1905: 4.6.9 2022-02-17 15:25:56 +01:00
vdutta
0fd29ae954 bbf: 6.4.25 2022-02-17 19:26:51 +05:30
Grzegorz Sluja
0be6005691 endptmngr: Add support for RTCP-XR packets 2022-02-16 17:11:01 +01:00
Nevadita
0f1e642fe0 map-topology: 3.2.2 2022-02-16 14:29:20 +01:00
Stanislaw Gruszka
0ead07e668 wfadatad: 6.10.4 2022-02-16 12:09:19 +01:00
Yalu Zhang
5bcc5d05dc dectmngr-3.5.1: Fix a bug that handsets cannot receive incoming calls reliably 2022-02-16 10:42:40 +01:00
Anjan Chanda
ab91bd9941 ieee1905: add openssl dependency 2022-02-15 16:24:56 +01:00
Jakob Olsson
314f90a0f4 map-agent: 7.0.2 2022-02-15 10:19:14 +01:00
Anjan Chanda
429112ba92 easy-soc-libs: 6.4.39 2022-02-15 09:59:21 +01:00
Jakob Olsson
b3c54526c2 map-agent: 7.0.1 2022-02-14 17:55:11 +01:00
Hemlata Bhatt
b624d52243 dectmngr : don't allow failure in static code analysis 2022-02-11 17:52:18 +01:00
Hemlata Bhatt
1b661a7407 endptmngr :Enable compiling options -Wall and -Werror 2022-02-11 17:34:42 +01:00
vdutta
ec55634131 icwmp: 8.2.27 2022-02-11 21:46:03 +05:30
Stanislaw Gruszka
12dfd9be28 wfadatad: 6.10.3 2022-02-11 16:12:47 +01:00
nevadita.chatterjee
466d442666 map-topology:3.2.1 2022-02-11 13:01:57 +01:00
Stanislaw Gruszka
28b4fa040a map-agent: 7.0.0: traffic separation fixes 2022-02-11 11:24:16 +00:00
vdutta
2077f29acf bbf: 6.4.24 2022-02-10 19:31:29 +05:30
Anjan Chanda
7335034c2b ieee1905: 4.6.8 2022-02-10 14:31:50 +01:00
vdutta
9ae0800d77 bbf: 6.4.23 2022-02-10 18:23:53 +05:30
vdutta
5d74e693c7 bbf: 6.4.22 2022-02-09 21:15:09 +05:30
Jakob Olsson
d513b5b799 map-controller: 5.4.7 2022-02-09 16:39:33 +01:00
Sukru Senli
40503fc42d sulu: 0.2.28 2022-02-09 12:43:59 +01:00
vdutta
34acd302be bbf: 6.4.21 2022-02-09 09:58:09 +05:30
Sukru Senli
705fb9e41b netmode: do not run netmode if mode is same as last saved mode 2022-02-08 23:04:55 +01:00
Sukru Senli
8fb0ffc766 netmode: do not rely on mode folder 2022-02-08 15:08:48 +01:00
vdutta
8e8442e508 bbf: 6.4.20 2022-02-08 15:36:23 +05:30
vdutta
e7486f4538 stunc: 1.0.4
(cherry picked from commit 2bc7ff558e)
2022-02-08 08:36:27 +00:00
vdutta
957d176f26 udpechoserver: Added static code analysis pipeline
(cherry picked from commit df0b0ec7ea)
2022-02-08 08:30:08 +00:00
Amin Ben Ramdhane
454afbbc98 udpechoserver: 1.0.1
(cherry picked from commit 1fbbaa8c59)
2022-02-08 08:29:05 +00:00
Amin Ben Ramdhane
ebda97fe62 stunc: 1.0.3
(cherry picked from commit b214f5213b)
2022-02-08 08:27:52 +00:00
Sukru Senli
b261816fe4 netmode: do nothing if mode is not set 2022-02-07 21:17:25 +01:00
Jakob Olsson
0fe82491e3 map-agent: 6.6.4 2022-02-07 12:17:12 +01:00
Jakob Olsson
a4e457a3ee map-controller: 5.4.6 2022-02-07 12:15:10 +01:00
Sukru Senli
1a4ab4713e netmode: remove default netmodes 2022-02-07 10:27:23 +01:00
Sukru Senli
4cce081fd3 netmode: strip netmoded out of netmode package 2022-02-07 10:27:16 +01:00
Jakob Olsson
a730c6a2e0 map-agent: 6.6.3 2022-02-04 16:06:25 +01:00
Yalu Zhang
932385bec1 dectmngr-3.5.0: Upgrading to CMBS 4.13 Build 16 official release
This includes both the binary firmware on the target and dectmngr on the host.
2022-02-04 14:42:03 +01:00
Anjan Chanda
642ffec9cd wifimngr: 14.0.6 2022-02-04 14:15:14 +01:00
Anjan Chanda
d1cd14742e ieee1905: 4.6.4 2022-02-04 14:12:01 +01:00
Amit KUmar
c9309739a6 easy-soc-libs: libqos static warning corrected 2022-02-04 10:58:49 +01:00
Amit KUmar
979fe82336 easy-soc-libs: dsl ethernet static error resolved 2022-02-04 10:58:47 +01:00
vdutta
e7c84ac6ba bbf: 6.4.19 2022-02-04 15:23:42 +05:30
vdutta
9a8f2cb393 icwmp: 8.2.26 2022-02-04 15:03:52 +05:30
Hemlata Bhatt
7af3534bc9 dectmngr: Remove extra verbose syslog for firmware upgrading on the base station 2022-02-04 10:32:29 +01:00
Jakob Olsson
f1795e0263 map-agent: 6.6.2 2022-02-03 12:45:18 +01:00
Jakob Olsson
a2115711bb map-controller: 5.4.5 2022-02-02 17:07:02 +01:00
Jakob Olsson
2b26e9083b map-agent: 6.6.1 2022-02-02 17:06:20 +01:00
Sukru Senli
1978d357c9 crun: remove as it is now available under openwrt feed packages 2022-02-02 11:16:01 +01:00
Jakob Olsson
822f77590d wifimngr: 05-wifi: update to new map backhaul file 2022-01-31 14:59:04 +01:00
Sukru Senli
3d31052d40 sulu: 0.2.27 2022-01-28 14:33:01 +01:00
Erik Karlsson
dc56c93b73 icwmp: Use correct syntax with tr
The tr command does not take regular expressions. In addition,
unquoted use of [] is unsafe as it is subject to wildcard expansion by
the shell.
2022-01-28 12:26:07 +00:00
Amin Ben Ramdhane
0dd95029e6 bbf: 6.4.18 2022-01-28 13:20:18 +01:00
Amin Ben Ramdhane
5f92faf0a1 bbf: 6.4.17 2022-01-28 11:55:09 +01:00
Sukru Senli
31ed1f802b iop: genconfig: remove unused targets 2022-01-27 16:42:43 +01:00
Jakob Olsson
c73ac6665b map-agent: 6.6.0: multiap.backhaul 2022-01-27 15:48:14 +01:00
Sukru Senli
431d1fbf34 port-management: populate ports config from device-tree if db does not exist 2022-01-27 14:55:41 +01:00
Sukru Senli
2ddb4fb5fc iop: genconfig: remove unsupported targets 2022-01-27 11:15:34 +01:00
vdutta
1835fe7a50 swmodd: Remove cgroup config from iopsys template 2022-01-27 13:49:51 +05:30
vdutta
d0e30dade4 icwmp: 8.2.25 2022-01-27 12:03:35 +05:30
Amin Ben Ramdhane
be867f1b25 uspd: 2.1.43 2022-01-26 13:22:34 +01:00
Amin Ben Ramdhane
9b2318242b bbf: 6.4.16 2022-01-26 13:21:28 +01:00
Anjan Chanda
8fee87c3c6 ieee1905: 4.6.0 2022-01-26 10:09:41 +01:00
vdutta
2fbdb4b3d2 obuspa: Added coverage in module test 2022-01-26 12:27:04 +05:30
Rahul
337c9a52f9 qosmngr: fix static code warnings
Updated the makefile version and bump the minor version
2022-01-25 18:32:09 +05:30
vdutta
6c86adbf86 uspd: 2.1.42 2022-01-25 18:19:56 +05:30
vdutta
e316bea78f bbf: 6.4.15 2022-01-25 18:17:49 +05:30
vdutta
233d714564 icwmp: Use db device for sn instead of db hw 2022-01-25 10:32:05 +05:30
Sukru Senli
13b742fe44 sulu: 0.2.26 2022-01-24 19:02:23 +01:00
Sukru Senli
c23ae5dad1 obuspa: read oui and sn from db device instead of db hw 2022-01-24 17:46:50 +01:00
Fredrik Eriksson
3c7aa191ea iop/config: deselect glib2
To our knowledge this is not needed and takes space.
2022-01-24 16:38:26 +00:00
Jakob Olsson
d8bbc9de81 map-agent: 6.5.3 2022-01-24 13:16:43 +01:00
Sukru Senli
92e353bb49 questd: 5.2.3 2022-01-21 17:08:57 +01:00
Sukru Senli
17fd78bc94 Revert "sulu: install sulu-full instead"
This reverts commit 68ca3b1d07.
2022-01-21 15:21:52 +01:00
Sukru Senli
68ca3b1d07 sulu: install sulu-full instead 2022-01-21 15:16:20 +01:00
Jakob Olsson
05a5616347 ieee1905: 4.2.2 2022-01-21 13:25:36 +01:00
Jakob Olsson
90f102b36a map-controller: 5.4.4 2022-01-21 11:34:22 +01:00
Sukru Senli
3e95e599e4 sulu: 0.2.25 2022-01-20 21:05:05 +01:00
Jakob Olsson
12d1e79339 map-controller: 5.4.3 2022-01-20 17:24:15 +01:00
Jakob Olsson
9ffed931c6 map-agent: 6.5.2 2022-01-20 17:22:58 +01:00
Amin Ben Ramdhane
aa8949e9e4 bbf: 6.4.14 2022-01-20 15:21:11 +01:00
sandeep sharma
c31e10cd88 Fixed: QoS statistics for Eagle LAN ports end up on the wrong queue 2022-01-20 12:38:44 +00:00
Amin Ben Ramdhane
1257c11c69 bbf: 6.4.13 2022-01-18 17:55:00 +01:00
vdutta
147c6de58c obuspa: 4.1.0.17 2022-01-18 21:22:48 +05:30
Jakob Olsson
b821b189d1 map-controller: 5.4.2 2022-01-17 14:00:16 +01:00
Jakob Olsson
cae7d71907 map-controller: 5.4.1 2022-01-17 10:48:25 +01:00
vdutta
92748d489a uspd: 2.1.41 2022-01-17 14:41:44 +05:30
Jakob Olsson
9847af7e74 map-agent: 6.5.1 2022-01-17 10:02:52 +01:00
Anjan Chanda
8e98dc9526 map-controller: 5.4.0 2022-01-14 21:11:42 +01:00
Anjan Chanda
1fe4fbdd4e wfadatad: 6.10.2 2022-01-14 21:11:06 +01:00
Anjan Chanda
e4f24b2223 map-topology: 3.2.0 2022-01-14 21:10:42 +01:00
Anjan Chanda
ec905407f0 map-agent: 6.5.0 2022-01-14 21:09:52 +01:00
vdutta
0c0c7316fa bbf: 6.4.12 2022-01-14 21:03:38 +05:30
vdutta
72da7b55c2 icwmp: 8.2.23 2022-01-14 20:54:34 +05:30
vdutta
60fe16d7ce swmodd: 2.0.20 2022-01-14 20:53:18 +05:30
Jakob Olsson
cb1fa79dcd ieee1905: 4.2.2 2022-01-14 14:43:09 +01:00
vdutta
15ab89ef7d icwmp: Fix no-wan-tr069-inform issue 2022-01-14 13:14:00 +05:30
Andreas Gnau
975f4e7552 Update feed [ iopsys ] package [ u-boot ] variant [ex400]
This is mostly for documentation purposes. U-Boot for EX400 does no longer
build with latest binutils used in OpenWrt 21.02, which is why we do not ship
U-Boot in our images for EX400 at the moment. This is the U-Boot that has been
shipped in the migrator image
EX400-X-IOPSYS-6.3.0ALPHA4-28-g556c4319d1-U-Boot-826af23a77-210826_1419-ubifs-MIGRATOR.y3

-------------------------------------------------------------------------------
* 826af23a77 ex400: Autodetect squashfs vs UBIFS
* 3077d68ddf ex400: Enable setexpr command
* 5aa83e12bc cmd: itest: correct calculus for long format
* 0cd508d8dd ex400: enable network by default
* 2fdb548516 use iopsys FIT image when doing a web upgrade
* b4f73f52f5 added a new command to flash an an iopsys FIT image
* dd6f5d4609 ex400: update environment variables to be aligned with IOPSYS 6 design
* cb68482deb Merge branch 'ex400_add_fit_support' into 'ex400'
* 4e46ac74e0 ex400: uboot: add FIT support
-------------------------------------------------------------------------------
commit 826af23a7723ee05dc9bc023d12a83f44aa649f4
Author: Andreas Gnau <andreas.gnau@iopsys.eu>
Date: 2021-08-25 14:29:46 +0200

    ex400: Autodetect squashfs vs UBIFS

Base directory -> /
 include/configs/inteno_mt7621.h | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)
-------------------------------------------------------------------------------
commit 3077d68ddf31a0ad999485e5144098a3399ce0c5
Author: Andreas Gnau <andreas.gnau@iopsys.eu>
Date: 2021-08-10 12:24:00 +0200

    ex400: Enable setexpr command

    Enable setexpr command in config. This is needed for calculating the UBI
    volume id of the rootfs volume which is needed for squashfs as root.

Base directory -> /
 configs/ex400_defconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
-------------------------------------------------------------------------------
commit 5aa83e12bc1195366485b70cc6dfc41f0d5f992f
Author: Sebastien Colleur <sebastienx.colleur@intel.com>
Date: 2017-02-10 15:59:15 +0300

    cmd: itest: correct calculus for long format

    itest shell command doesn't work correctly in long format when doing
    comparaison due to wrong mask value calculus that overflow on 32 bits
    values.

    Signed-off-by: Sebastien Colleur <sebastienx.colleur@intel.com> Reviewed-by:
    Simon Glass <sjg@chromium.org>
    (cherry picked from commit 2c79fd401982c7d6c5e77c09bc7035f8a3766c88)

Base directory -> /
 cmd/itest.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
-------------------------------------------------------------------------------
commit 0cd508d8dd077d62baa59a0d74e2e5f24cff8926
Author: Oussama Ghorbel <oussama.ghorbel@iopsys.eu>
Date: 2021-07-27 16:36:35 +0200

    ex400: enable network by default

    as the equipement is used for development purpose only then enable network
    by default for convinence

Base directory -> /
 board/inteno/common/board.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
-------------------------------------------------------------------------------
commit 2fdb54851610838e35e4d889a0fbc14fb766a78b
Author: Oussama Ghorbel <oussama.ghorbel@iopsys.eu>
Date: 2021-07-23 10:52:32 +0200

    use iopsys FIT image when doing a web upgrade

Base directory -> /
 board/inteno/common/httpd.c | 18 +-----------------
 1 file changed, 1 insertion(+), 17 deletions(-)
-------------------------------------------------------------------------------
commit b4f73f52f515fb19552b4a5183a5aaecbb4b4cd1
Author: Oussama Ghorbel <oussama.ghorbel@iopsys.eu>
Date: 2021-07-23 10:49:34 +0200

    added a new command to flash an an iopsys FIT image

Base directory -> /
 cmd/Makefile         |   1 +
 cmd/iopsys_upgrade.c | 289 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 290 insertions(+)
-------------------------------------------------------------------------------
commit dd6f5d4609df08d808931c4ca01e186d59cbbea1
Author: Oussama Ghorbel <oussama.ghorbel@iopsys.eu>
Date: 2021-07-23 10:43:18 +0200

    ex400: update environment variables to be aligned with IOPSYS 6 design

    Use separate volumne for kernel use u-boot for mtd name instead of uboot

    fix

Base directory -> /
 include/configs/inteno_mt7621.h | 40 +++++++++++++++-------------------------
 1 file changed, 15 insertions(+), 25 deletions(-)
-------------------------------------------------------------------------------
commit cb68482debf9b5a3ef7471cc4182f189ab743b09
Author: Oussama Ghorbel <oussama.ghorbel@iopsys.eu>
Date: 2021-03-24 10:10:17 +0000

    Merge branch 'ex400_add_fit_support' into 'ex400'

    ex400: uboot: add FIT support

    See merge request fork/uboot!2
Base directory -> /
 configs/ex400_defconfig | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
-------------------------------------------------------------------------------
commit 4e46ac74e0944684590899f969de9b6335a8f69a
Author: Bartlomiej Grzeskowiak <bartlomiej.grzeskowiak@iopsys.eu>
Date: 2021-03-23 09:28:21 +0100

    ex400: uboot: add FIT support

    Signed-off-by: Bartlomiej Grzeskowiak <bartlomiej.grzeskowiak@iopsys.eu>

Base directory -> /
 configs/ex400_defconfig | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
-------------------------------------------------------------------------------
2022-01-12 17:41:46 +01:00
Amin Ben Ramdhane
a3a7c6da1b bbf: 6.4.11 2022-01-10 15:07:30 +01:00
vdutta
dca442ce01 bbf: 6.4.10 2022-01-10 09:04:32 +05:30
vdutta
6f00aa22fd icwmp: 8.2.21 2022-01-07 18:10:46 +05:30
Neeraj Bijalwan
575f5c9d19 icwmp: 8.2.20 2022-01-06 13:07:33 +00:00
Janusz Dziedzic
a699302f46 wifimngr: 05-wifi add multiap param
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2022-01-05 17:11:05 +00:00
vdutta
4ef7a8034b twamp: Added TWAMP Light support 2022-01-04 23:10:22 +05:30
Artee Roy
9675953bf6 Enables setting of bridge as a proxy interface.
Setting of dfault value for mcast interfaces.
2022-01-04 11:40:13 +00:00
Janusz Dziedzic
d3d4c87f82 easy-soc-libs: new version 6.4.34
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2022-01-03 15:58:47 +00:00
Bartlomiej Grzeskowiak
52ced81af6 uboot: allow ensemble uboot compilation
Not tested yet. Build succesfull.

Signed-off-by: Bartlomiej Grzeskowiak <bartlomiej.grzeskowiak@iopsys.eu>
2022-01-03 15:45:54 +00:00
Amin Ben Ramdhane
20f17b81c5 bbf: 6.4.9 2021-12-31 22:24:25 +01:00
Grzegorz Sluja
aafcebaf3d endptmngr: Add averageRoundTripDelay rtp statistic 2021-12-30 12:29:07 +01:00
vdutta
6126333ad9 uspd: Updated schema updater algo 2021-12-30 12:59:22 +05:30
vdutta
fc15efe427 bbf: 6.4.8 2021-12-30 12:58:31 +05:30
Jakob Olsson
59d28497d9 map-controller: 5.3.0 2021-12-29 12:36:12 +01:00
Jakob Olsson
3a4a1b64bf map-agent: 6.4.0 2021-12-29 12:35:24 +01:00
Anjan Chanda
1ce127080e ieee1905: 4.2.1 2021-12-29 11:08:39 +01:00
Amit KUmar
f9a4bfa6d6 ponmngr: added omcid start 2021-12-28 15:18:38 +05:30
Grzegorz Sluja
e4365786b9 dectmngr-3.4.7 Retry mechanism in cmbs api init 2021-12-28 10:03:26 +01:00
Jakob Olsson
65c619060d wfadatad: enable respawn 2021-12-27 16:42:06 +01:00
Amin Ben Ramdhane
ef370bc886 bbf: 6.4.7 2021-12-27 15:26:06 +01:00
Rahul
0730c65372 qosmngr: resolve dscp to q mapping in L2 scenarios 2021-12-27 17:12:56 +05:30
Amin Ben Ramdhane
626e1241d6 bbf: 6.4.6 2021-12-26 15:45:25 +01:00
Amin Ben Ramdhane
b86544da9a bbf: 6.4.5 2021-12-24 11:00:06 +01:00
Yalu Zhang
3e38df2389 Revert 2f8a76e34d
Fix the bug that dectmngr fails to start at the first attempt

Wait for the target up and running before starting dectmngr. Otherwise HELLO_REPLY
cannot be received and dectmngr exits and is started again by procd.
2021-12-23 14:19:45 +01:00
Grzegorz Sluja
d34d6e8bf0 dectmngr-3.4.6 Fix for checking the dspg firmware version in file 2021-12-23 13:02:29 +01:00
Yalu Zhang
2f8a76e34d Fix the bug that dectmngr fails to start at the first attempt
Wait for the target up and running before starting dectmngr. Otherwise HELLO_REPLY
cannot be received and dectmngr exits and is started again by procd.
2021-12-23 10:58:57 +01:00
Grzegorz Sluja
55f1310daa dectmngr-3.4.5 Set RXTUN value during the start up 2021-12-23 09:23:06 +01:00
Grzegorz Sluja
57b528f2af dectmngr-3.4.4 changes
95214c4 Fix for restoring EEPROM parameters after FW upgrade
5ca32de Check country and play proper tones for UK
2021-12-22 14:55:03 +01:00
Grzegorz Sluja
670904cd6c dectmngr: Integrate new binary CMBS 4.13 Build 16 RC28 2021-12-22 13:08:11 +01:00
Amin Ben Ramdhane
ad0633029c bbf: 6.4.3 2021-12-22 12:57:01 +01:00
vdutta
9b823e5937 icwmp: 8.2.19 2021-12-22 17:09:55 +05:30
vdutta
431325e6e6 bbf: 6.4.2 2021-12-22 16:23:26 +05:30
Yalu Zhang
fd8fa1d7e2 dectmngr-3.4.3: remove those unreferenced keyb_* files and fix compiling warnings 2021-12-22 10:07:44 +01:00
Amin Ben Ramdhane
572bfa61dd bbf: 6.4.1 2021-12-21 16:52:30 +01:00
Jakob Olsson
5963ff1139 map-agent: 6.3.10 2021-12-21 16:21:12 +01:00
vdutta
363d3dfcb7 swmodd: 2.0.19 2021-12-21 20:12:16 +05:30
vdutta
cf12bbe6e2 swmodd: 2.0.18 2021-12-21 20:07:28 +05:30
Jakob Olsson
426437c233 map-agent: 6.3.9 2021-12-21 15:16:44 +01:00
Jakob Olsson
742ded177d map-agent: 6.3.8 2021-12-21 14:45:15 +01:00
Jakob Olsson
a5f6b10a50 ieee1905: 4.1.2 2021-12-21 14:26:02 +01:00
Grzegorz Sluja
c25139968a Update package dectmngr
bb941c1 Fixes for static code analysis
0105a0c Update the general module document
2021-12-21 14:22:01 +01:00
Jakob Olsson
f52700c0f0 map-agent: 6.3.7 2021-12-21 14:21:02 +01:00
Jakob Olsson
5bc8757a3e map-controller: 5.2.6 2021-12-21 12:27:44 +01:00
Jakob Olsson
5b0fe1d2dc map-controller: 5.2.5 2021-12-21 11:35:08 +01:00
Filip Matusiak
a31ae89e79 map-agent: multiap: fix missing BSSID on some interfaces 2021-12-21 09:48:38 +00:00
Yalu Zhang
bd72194d2d bbf: 6.4.0 2021-12-21 09:55:03 +01:00
Jakob Olsson
babb25709b map-agent: 6.3.6 2021-12-21 09:35:31 +01:00
Janusz Dziedzic
ea37c333f9 wifimngr: new version 14.0.5
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2021-12-20 19:25:30 +00:00
Amin Ben Ramdhane
be07b58cf5 periodicstats: 1.1.0 2021-12-20 17:06:26 +01:00
Amin Ben Ramdhane
13a6a59469 bbf: 6.3.9 2021-12-20 17:03:43 +01:00
Amin Ben Ramdhane
b6301bba94 bbf: 6.3.8 2021-12-20 16:37:59 +01:00
vdutta
dd627b7f70 rulengd: 1.2.6
- remove regex matching logic for event
2021-12-20 19:39:15 +05:30
Sukru Senli
0d2a12f029 sulu: 0.2.24
jakub <jakub.blaszkowski@iopsys.eu>
2021-12-20 09:59:01 +01:00
Jakob Olsson
0f1460f45f map-controller: 5.2.4 2021-12-17 16:57:51 +01:00
Sukru Senli
022e506a56 sulu: 0.2.23
jakub <jakub.blaszkowski@iopsys.eu>
2021-12-17 16:40:49 +01:00
Jakob Olsson
9025395702 Revert "map-controller: make uci wireless to mapcontroller sync configurable"
This reverts commit 5173b01cb2.
2021-12-17 15:55:00 +01:00
Sukru Senli
35ce40b964 sulu: 0.2.22 2021-12-17 15:39:14 +01:00
Jakob Olsson
0c915ba8b8 map-agent: 6.3.5 2021-12-17 14:45:58 +01:00
vdutta
60ab6d1a6b swmodd: Use DUStateChange! to notify faults 2021-12-17 18:40:40 +05:30
sverma
8ec45319bc rulengd: 1.2.5
regex match for event data only
2021-12-17 13:57:27 +01:00
Jakob Olsson
1536d860dd wfadatad: 6.10.1 2021-12-16 16:35:33 +01:00
Jakob Olsson
49858f3601 map-agent: 6.3.4 2021-12-16 16:33:47 +01:00
Sukru Senli
1c305c69e4 wfadatad: remove .init from init script 2021-12-16 16:28:51 +01:00
Anjan Chanda
e592e2d567 wfadatad: rename procd init filenames to match daemon names 2021-12-16 15:27:32 +01:00
Erik Karlsson
ff7714c88e endptmngr: do not start if board does not have voice
Prevents the following issue on boards without voice:

Thu Dec 2 12:45:07 2021 daemon.info procd: Instance endptmngr::instance1 s in a crash loop 4 crashes, 0 seconds since last crash
2021-12-15 13:11:48 +00:00
Fredrik Eriksson
9dda4d7ffa Remove redundant dependency on map-plugin 2021-12-15 13:10:34 +00:00
Jakob Olsson
10cee1f785 map-agent: 6.3.3 2021-12-15 14:09:34 +01:00
Erik Karlsson
8816c26e2a Use correct ranges with tr
The tr command does not take regular expressions and should not be
used with ranges such as [a-z] which furthermore can cause issues if
unquoted as they are interpreted by the shell.
2021-12-15 13:08:18 +00:00
Janusz Dziedzic
aba742a5e7 easy-soc-libs: 6.4.33
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2021-12-15 12:26:30 +00:00
suvendhu
d199dadd39 swmodd: config option to select host as EE 2021-12-15 16:49:15 +05:30
Jakob Olsson
fca18d2da5 wifimngr: 14.0.4 2021-12-15 09:33:43 +01:00
Janusz Dziedzic
3b819f5b1d easy-soc-libs: kick hash
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2021-12-14 19:29:47 +00:00
Amin Ben Ramdhane
b49d14370d bbf: 6.3.7 2021-12-14 18:24:31 +01:00
Jakob Olsson
3f2befa23a map-agent: corrections to example config 2021-12-14 17:31:22 +01:00
Andreas Gnau
52809e1e94 Update feed [ iopsys ] package [ peripheral_manager ]
-------------------------------------------------------------------------------
* 15ba90f Add support for external LED application.
* da6eb1d Add functionality to change default brightness for SK9822 LEDs.
-------------------------------------------------------------------------------
commit 15ba90f01914113e7c5e8f8a6df6279c882e8265
Author: Markus Gothe <markus.gothe@genexis.eu>
Date: 2021-05-11 09:52:55 +0200

    Add support for external LED application.

    Add support for a callback script/application to control LEDs.

    This commits adds the ability to control a LED via an external application.
    The API is simple and is described in
    'iopsys-brcm63xx-arm/tiger/base-files/sbin/external_led_ctrl.sh'.

    To avoid unnecessary execution of the callback-script, logic has been added
    to keep track on when to update the LEDs.

Base directory -> /
 src/gpio_led.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 132 insertions(+), 1 deletion(-)
-------------------------------------------------------------------------------
commit da6eb1d6c0fd03d45cbf5213acd5c2ff07b45bf5
Author: Markus Gothe <markus.gothe@genexis.eu>
Date: 2021-05-11 09:40:00 +0200

    Add functionality to change default brightness for SK9822 LEDs.

    This commit adds the 'sk9822_brightness_file' option. The option can be used
    to adjust the default maximum brightness for the SK9822 LED driver.

Base directory -> /
 src/gpio_led.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
-------------------------------------------------------------------------------
2021-12-14 17:29:55 +01:00
Jakob Olsson
52ff5c79dd map-controller: 5.2.3 2021-12-14 17:15:21 +01:00
Jakob Olsson
09ad1ffa91 map-agent: 6.3.2: mapagent config changes 2021-12-14 17:05:21 +01:00
Yalu Zhang
1d2d9b7b97 dectmngr-3.4.2: Send notification of line and handset use status only to those handsets in range 2021-12-14 14:25:41 +01:00
Amit KUmar
7f405f04ac ponmngr: removed config file 2021-12-14 06:03:10 +00:00
Amit KUmar
16134d0a2d ponmngr: initial implementation 2021-12-14 06:03:10 +00:00
Yalu Zhang
5fbc784901 dectmngr-3.4.1: Create or update the entry for every line in list LineDiagnostic 2021-12-13 18:16:40 +01:00
Jakob Olsson
0eaba859a7 map-agent: remove uplink tmp file when restarting dynbhd 2021-12-13 16:24:44 +01:00
Jakob Olsson
7828e67308 map-controller: 5.2.2 2021-12-13 13:48:37 +01:00
vdutta
985ccf339f icwmp: 8.2.18 2021-12-13 16:11:10 +05:30
vdutta
b8f36d23ec bbf: 6.3.6 2021-12-13 15:45:57 +05:30
Amin Ben Ramdhane
4f7aeaaec2 bbf: 6.3.5 2021-12-13 09:26:47 +01:00
Anjan Chanda
d976140484 iop: config: add wfadatad-collector to build 2021-12-11 10:19:12 +01:00
vdutta
747436ce8f obuspa: Handle retries and lockout for challenges 2021-12-10 21:29:53 +05:30
Jakob Olsson
dde560d314 map-agent: 6.3.1 2021-12-10 15:45:22 +01:00
Amin Ben Ramdhane
34ec63d1f2 bbf: 6.3.4 2021-12-10 14:39:59 +01:00
vdutta
d4465d81f7 uspd: 2.1.39 2021-12-10 18:19:20 +05:30
vdutta
022ec4d6bb icwmp: 8.2.17 2021-12-10 17:50:31 +05:30
vdutta
6c68ff3be7 swmodd: Added auto-boot for lxc containers 2021-12-10 17:48:18 +05:30
Jakob Olsson
9e1e0eb0df map-controller: 5.2.14 2021-12-10 13:13:39 +01:00
Jakob Olsson
63ba56b87e map-agent: 6.3.0: introduce dynbhd 2021-12-10 13:13:08 +01:00
Anjan Chanda
53ab41ea2f ieee1905: 4.1.1 2021-12-10 12:58:31 +01:00
Anjan Chanda
d1477636f9 wfadatad: 6.10.0 (deagent + decollector) 2021-12-10 12:57:10 +01:00
Grzegorz Sluja
b2e8affb08 dectmngr: Do not create new LineDiagnostic entry each startup 2021-12-10 12:44:35 +01:00
Hemlata Bhatt
2dc9b89cd5 Voice : fix extension provider value type 2021-12-10 12:41:43 +01:00
Anjan Chanda
77acc69dbe wfadatad: 5.1.1 2021-12-09 20:09:43 +01:00
Anjan Chanda
5ac418113e map-controller: 5.2.13 2021-12-09 20:09:18 +01:00
Anjan Chanda
1ba55b753e map-agent: 6.2.12 2021-12-09 20:08:50 +01:00
Anjan Chanda
d483abe7d2 ieee1905: 4.1.0 2021-12-09 20:08:20 +01:00
Anjan Chanda
511d471d54 wifimngr: 14.0.3 2021-12-09 20:07:56 +01:00
Anjan Chanda
206ecd46db easy-soc-libs: 6.4.32 2021-12-09 20:07:29 +01:00
Andreas Gnau
f9f31384c2 Update feed [ iopsys ] package [ fdtextract ]
-------------------------------------------------------------------------------
* 7e013f0 Do not read entire file into buffer when extracting
-------------------------------------------------------------------------------
commit 7e013f0afa68378d38a6bdc9b0c5a342bd3dd0a5
Author: Erik Karlsson <erik.karlsson@genexis.eu>
Date: 2021-11-30 00:09:44 +0100

    Do not read entire file into buffer when extracting

    Only read FDT into buffer, and then in case of external image, use lseek
    followed by sendfile if supported or otherwise read/write.

    Remove unnecessary strdup of option arguments that would leak memory in case
    options are repeated.

    Fix confusing error message with --attribute when --image is used to specify
    a non-existing image.

Base directory -> /
 fdtextract.c | 169 +++++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 106 insertions(+), 63 deletions(-)
-------------------------------------------------------------------------------
2021-12-09 18:24:19 +01:00
vdutta
2c4e50ab10 swmodd: optimize du_list get time 2021-12-09 21:04:40 +05:30
vdutta
ac46849475 obuspa: 4.1.0.15 2021-12-09 21:01:14 +05:30
Amin Ben Ramdhane
4db7061884 bbf: 6.3.3 2021-12-09 12:14:09 +01:00
Grzegorz Sluja
de40d120e2 dectmngr: Fix unitialized ptr value causing crash 2021-12-09 10:03:10 +01:00
Wenpeng Song
e54e20de45 dectmngr: Add the option to direct CMBS debug messages to syslog 2021-12-08 17:02:15 +00:00
Wenpeng Song
7add2a163d merge together with dectmngr feeds update 2021-12-08 16:32:34 +00:00
Yalu Zhang
499709e2df dectmngr-3.4.0: Support implicit intrusion call 2021-12-08 15:53:03 +01:00
vdutta
c566d23c78 sulu: 0.2.21 2021-12-07 19:49:30 +05:30
vdutta
a5c8b7145f rulengd: 1.2.4 2021-12-07 17:56:52 +05:30
vdutta
0419beb911 periodicstats: 1.0.5 2021-12-07 17:46:29 +05:30
vdutta
8bb22efe7d swmodd: Improved memoryinfo and SetRequestedState 2021-12-07 17:37:48 +05:30
vdutta
bff8f75bbb icwmp: Remove manual seeding of openssl RAND generator 2021-12-07 17:29:22 +05:30
Jakob Olsson
be57a189f7 map-controller: 5.2.3 2021-12-07 12:48:42 +01:00
Grzegorz Sluja
9c365459bb dectmngr: Update uci when DECT hs name is changed from hs menu 2021-12-07 11:53:18 +01:00
Amin Ben Ramdhane
f4e9f29d3d bbf: 6.3.2 2021-12-07 11:18:23 +01:00
Jakob Olsson
ac56460fec map-agent: 6.2.2 2021-12-07 10:52:49 +01:00
Omar Kallel
cb2077377a icwmp: 8.2.15 2021-12-06 18:25:04 +01:00
Amin Ben Ramdhane
673dfc8589 bbf: 6.3.1 2021-12-06 12:18:44 +01:00
Jakob Olsson
a287107ee1 map-controller: 5.2.2 2021-12-06 11:32:21 +01:00
vdutta
47396a4e4f obuspa: Boot time improvements 2021-12-03 19:38:37 +05:30
vdutta
d82756305c icwmp: Boot time improvements 2021-12-03 19:35:38 +05:30
Omar Kallel
5bd754fc9a icwmp: 8.2.13 2021-12-03 11:40:34 +01:00
Dominic Lake
bed5379108 obuspa: Add NotifRetry option to UCI
Added support for NotifRetry in UCI for use with subscriptions.
2021-12-03 09:47:41 +00:00
Yalu Zhang
d8e5dcf859 dectmngr 3.3.1: add some extensions to Line Settings List defined in CAT-iq 2.0
- /etc/init.d/dectmngr: set model id from hw.board.dect_model_id if the value in the database
  is valid. Otherwise set to 30.3B.06
- Add a config option: ENABLE_LINE_SETTINGS_EXTENSION in the package
2021-12-02 18:15:51 +01:00
Jakob Olsson
64f9e23850 map-agent: 6.2.1 2021-12-01 17:28:54 +01:00
Suru Dissanaike
aaffffdba2 quickjs-websocket: 1.1 2021-12-01 16:22:58 +01:00
arne.jonsson
0d6980e0ec Disabled and removed DEVTMPS from config 2021-12-01 15:00:27 +00:00
arne.jonsson
61f454043d Disabled and removed DEVTMPS from config 2021-12-01 15:00:27 +00:00
Janusz Dziedzic
defe48e4e8 ieee1905: allow local dev build
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2021-12-01 08:30:54 +00:00
Janusz Dziedzic
4d893499a5 map-controller: add local dev build option
After that ~/git/map-controller code will
be used/compiled.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2021-12-01 08:30:54 +00:00
Grzegorz Sluja
e32f2f09be dectmngr: Move DECT chip independent functions to dect_common.h 2021-11-30 18:51:39 +01:00
Jakob Olsson
183ba5d634 map-controller: 5.2.1 2021-11-30 17:30:41 +01:00
Grzegorz Sluja
809113d4b2 dectmngr: Remove handset's name section from config on deregistration 2021-11-30 12:24:12 +01:00
vdutta
927b002aa6 obuspa: Updated uci schema
- prototrace uci option to enable protocol trace
 - Added BootParamName for controller boot parameters
2021-11-29 17:54:25 +05:30
vdutta
c5654ad9ab icwmp: 8.2.12-2021-11-29 2021-11-29 11:14:46 +05:30
vdutta
2e3013dc56 uspd: 2.1.38 2021-11-26 19:19:43 +05:30
suvendhu
a7dd783b49 swmodd: use curl for du_install 2021-11-26 18:48:23 +05:30
Jakob Olsson
d3451b7bd4 ieee1905: 4.0.6 2021-11-26 13:18:39 +01:00
vdutta
776860187d icwmp: Fix race condition in dhcp ACS provisioning 2021-11-26 17:27:56 +05:30
Grzegorz Sluja
d2dda88aad dectmngr: Do not restart dectmngr on dect config change 2021-11-26 12:37:49 +01:00
Yalu Zhang
22871d2410 Update package dectmngr 3.3.0
Multiple line support with m:n mapping between extensions and DECT handsets
2021-11-26 11:59:42 +01:00
Amin Ben Ramdhane
707203b42a bbf: 6.3.0 2021-11-26 10:41:55 +01:00
Omar Kallel
60fb332fff icwmp: Remove set dhcp reqopt from uci-defaults && set dhcp_url to icwmp config 2021-11-25 18:05:39 +01:00
Omar Kallel
bd0d27ebc9 Start icwmp only if EnableCWMP is true 2021-11-25 17:39:51 +01:00
Jakob Olsson
0af83a4892 wfadatad: 5.1.0 2021-11-25 17:15:35 +01:00
Jakob Olsson
715f58db4d map-topology: 3.1.0 2021-11-25 16:49:23 +01:00
Jakob Olsson
cdfa0a7313 map-controller: 5.2.0 2021-11-25 15:57:06 +01:00
Jakob Olsson
9b12400c0b map-agent: 6.2.0 2021-11-25 15:54:00 +01:00
Dominic Lake
b59e3250af obuspa: Support different boot params per controller
Added support to specify the boot params for each controller separately in the controller UCI section.
2021-11-24 16:35:50 +00:00
vdutta
f742ce11ae obuspa: Publish endpoint id to mqtt broker for usp-js 2021-11-24 19:52:25 +05:30
vdutta
7a6ff46b8a swmodd: 2.0.11 2021-11-24 19:22:14 +05:30
Amin Ben Ramdhane
e3d9a24ed7 bbf: 6.2.6 2021-11-24 12:13:42 +01:00
vdutta
88fcb2e4df uspd: Fix schema updater 2021-11-24 13:55:39 +05:30
vdutta
0f05633d74 obuspa: updated default interface to loopback 2021-11-24 13:20:38 +05:30
Jakob Olsson
5173b01cb2 map-controller: make uci wireless to mapcontroller sync configurable 2021-11-23 17:16:24 +01:00
Omar Kallel
86cf6fc81e icwmp: 8.2.11-2021-11-23 2021-11-23 16:44:28 +01:00
Omar Kallel
2ee29d8252 Add BOOT event when starting icwmp 2021-11-23 16:38:16 +01:00
Omar Kallel
ef178897ba Add BOOT event when starting icwmp 2021-11-23 15:24:33 +01:00
Suru Dissanaike
1d4b28acd4 quickjs: added quickjs package graciously provided by Genexis 2021-11-23 10:34:34 +01:00
Anjan Chanda
2b6e74fb80 map-topology: include libnl3 in target-cflags 2021-11-23 09:21:34 +01:00
Janusz Dziedzic
32cfd29d74 map-agent: add local dev build option
After that ~/git/map-agent code will
be used/compiled.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
2021-11-22 17:18:54 +00:00
Omar Kallel
63959e908e icwmp: 8.2.10-2021-11-22 2021-11-22 15:50:33 +01:00
vdutta
80e2035662 uspd: 2.1.36 2021-11-22 20:06:12 +05:30
Amin Ben Ramdhane
7527faca9c bbf: 6.2.5 2021-11-22 14:18:27 +01:00
Erik Karlsson
b7e010be3b gryphon-led-module: use the right toolchain on Broadcom targets
Userspace toolchain was being used to build the kernel module which
although not correct happened to work on 32-bit kernel but obviously
does not work on 64-bit kernel with 32-bit userspace.

Ideally, it should but enough to set KERNEL_CROSS if Build/Compile is
updated to use KERNEL_CROSS instead of TARGET_CROSS, but not changing
TARGET_CROSS breaks scripts/strip-kmod.sh which for some reason uses
TARGET_CROSS rather than KERNEL_CROSS.
2021-11-19 16:16:19 +01:00
Amin Ben Ramdhane
84ad0eec4e bbf: 6.2.4 2021-11-19 14:49:31 +01:00
vdutta
bd188aaed2 swmodd: Multiple fixes
- Handle frozen containers
 - Handle libgcc package name miss-match
2021-11-19 11:08:38 +05:30
Amit Kumar
4d244eb31e mcastmngr: corrected P1 break of mcast stats 2021-11-18 06:48:52 +00:00
nevadita.chatterjee
14aab50849 easy-soc-libs: 6.4.28 2021-11-17 16:53:40 +05:30
sverma
3a605fd8f5 bbf: 6.2.3 2021-11-17 15:57:12 +05:30
Amin Ben Ramdhane
f9bbce19dd bbf: 6.2.2 2021-11-16 18:10:45 +01:00
Omar Kallel
a1677793d3 icwmp: Remove the use of .icwmpd_boot file 2021-11-16 11:51:50 +01:00
Grzegorz Sluja
d7a8913072 dectmngr: Refresh Contact List on handset after change from ubus 2021-11-16 09:51:05 +01:00
Omar Kallel
34c5ea3c75 Ticket refs #5876: icwmp: Init scripts enhancements and cleanup 2021-11-15 15:58:56 +01:00
Grzegorz Sluja
c006db0e21 dectmngr: Remove dependency to libiconv from dectmngr 2021-11-15 14:59:33 +01:00
Amin Ben Ramdhane
4e42968aca bbf: 6.2.1 2021-11-15 13:39:36 +01:00
vdutta
9b48e54734 icwmp: Fix random crashes 2021-11-13 16:21:52 +05:30
Amin Ben Ramdhane
77a41d56a1 bbf: 6.2.0 2021-11-12 14:11:43 +01:00
Andreas Gnau
90fa843074 gryphon-led-module: Build against bcmkernel on Broadcom platforms
Due to the complexity of the Broadcom build system which amongst others
puts dynamically generated symlinks into the kernel dir, we have a fake
kernel "bcmlinux" to please the OpenWrt build system. This kernel is not
used for anything but building the OpenWrt toolchain. To compile against
the right kernel that is running on the target, we need to compile the
kernel module against the kernel inside bcmkernel which is the one
compiled by the BCM SDK.
2021-11-12 12:11:08 +00:00
Jakob Olsson
524c718242 map-agent: 6.1.1 2021-11-12 11:21:52 +01:00
Jakob Olsson
e00102c2b9 map-controller: 5.1.1 2021-11-12 11:19:38 +01:00
Anjan Chanda
2c0b6b76e2 wfadatad: 5.0.5 2021-11-12 09:38:15 +01:00
Anjan Chanda
9e9dc5b1a9 wifimngr: 14.0.0 2021-11-12 09:37:33 +01:00
Anjan Chanda
4535b14305 easy-soc-libs: 6.4.27 2021-11-12 09:36:29 +01:00
Yalu Zhang
478e3a5c8b dectmngr: keep /etc/dect/LA_DB during sysupgrade 2021-11-11 15:24:40 +01:00
Amin Ben Ramdhane
98302e0523 periodicstats: 1.0.4 2021-11-11 13:57:02 +01:00
Amin Ben Ramdhane
4dc45c779a bbf: 6.1.9 2021-11-11 13:56:06 +01:00
Yalu Zhang
c1bef47f50 dectmngr: update Makefile to include the path for external libraries 2021-11-11 12:14:03 +01:00
Andreas Gnau
9fb0c48a22 dectmngr: Add missing iconv-full dependency
dectmngr has required libiconv-full, but did not declare the dependency.
This creates a risk for the build failing due to race conditions. After
we removed another config-option that depended on libiconv-full the
build started to fail because nothing depended on libiconv-full anymore.

Fixes: f6f1644b (iop: config: Don't enable CONFIG_BUILD_NLS, 2021-11-04)
2021-11-11 10:56:08 +01:00
Anjan Chanda
d8e35df684 wfa-capi: 1.1.0 2021-11-11 10:51:12 +01:00
Yalu Zhang
d0189d605f dectmngr: bump the package version to 3.2.0 2021-11-10 14:37:35 +00:00
Grzegorz Sluja
8de1704440 dectmngr: Add phonebook support 2021-11-10 11:18:09 +01:00
Andreas Gnau
f6f1644bab iop: config: Don't enable CONFIG_BUILD_NLS
It seems like CONFIG_BUILD_NLS it is not needed by anything, so disable
it. On an embedded device, we do not need localised output. End-users
will probably never interact via SSH with the device. So it is unclear
why it had been enabled in the first place.
2021-11-10 09:47:40 +00:00
vdutta
b1c705544b Added ifupdate in hotplug 2021-11-09 17:58:36 +01:00
Omar Kallel
bd8d574177 Remove init script logs 2021-11-09 17:57:02 +01:00
Omar Kallel
4b5c88b015 icwmp: Reduce I/O on filesystem 2021-11-09 17:51:48 +01:00
Omar Kallel
32245d37c3 Revert "Added ifupdate in hotplug"
This reverts commit 08244c5392.
2021-11-09 16:35:09 +01:00
Omar Kallel
56d2b9c4e3 Revert "icwmp: Reduce I/O on filesystem"
This reverts commit 146bc95709.
2021-11-09 16:34:59 +01:00
vdutta
08244c5392 Added ifupdate in hotplug 2021-11-09 16:24:21 +01:00
Omar Kallel
146bc95709 icwmp: Reduce I/O on filesystem 2021-11-09 16:23:31 +01:00
Amin Ben Ramdhane
25a861a55f bbf: 6.1.7 2021-11-09 15:49:15 +01:00
vdutta
86fab6969f uspd: Option to configure dm version to use 2021-11-08 11:26:01 +05:30
Amin Ben Ramdhane
5463df37e1 bbf: 6.1.6 2021-11-05 10:55:41 +01:00
Grzegorz Sluja
a480a0c95d dectmngr: Update package dectmngr
c2b5452 Disable dectmngr logging to file by default
6d0af6c SUOTA implementation
79fa843 Fix the bug of syslog messages with incorrect ident and facility
2021-11-04 07:52:37 +01:00
vdutta
89068fa876 icwmp: 8.2.6-2021-11-03 2021-11-03 21:23:20 +05:30
vdutta
c3cee3431c uspd: Enable caching of ubus data 2021-11-03 21:17:08 +05:30
Amin Ben Ramdhane
bf70b518bd bbf: 6.1.5 2021-11-03 16:42:09 +01:00
nevadita.chatterjee
ad293962c1 topology: 3.0.4 2021-11-03 13:36:41 +05:30
nevadita.chatterjee
6badc20bcc map-topology:3.0.3 2021-11-02 16:43:43 +05:30
vdutta
f8b51b9ca5 uspd: Add TransferComplete event with bbf plugin 2021-11-01 16:23:46 +05:30
Jakob Olsson
a5c390efdd ieee1905: 4.0.5 2021-10-29 16:08:31 +02:00
vdutta
6d011f8626 uspd: Extend TransferComplete with json plugin 2021-10-29 18:48:12 +05:30
vdutta
f1d5e5d7cd bbf: Support operate and events with json plugins 2021-10-29 18:45:12 +05:30
vdutta
0fed56903c icwmp: 8.2.6-2021-10-29 2021-10-29 17:20:09 +05:30
Jakob Olsson
2ac7be4652 map-agent: 6.1.0 2021-10-29 13:36:55 +02:00
Jakob Olsson
7e34649ce7 map-controller: 5.1.0 2021-10-29 13:36:26 +02:00
Amit Kumar
a404da9124 libqos: updated broadcom header file 2021-10-29 16:43:19 +05:30
Amit Kumar
d152eb0f17 qosmngr: porttminit added before qcfg 2021-10-29 10:45:10 +00:00
Hemlata Bhatt
fb8ed439b8 Adjustment for the restructure of asterisk UCI config 2021-10-29 11:58:40 +02:00
nevadita.chatterjee
6b23da2314 map-topology: 3.0.2 2021-10-29 13:19:02 +05:30
sverma
bc90649202 wfadatad: 5.0.3 2021-10-28 20:56:19 +05:30
Jakob Olsson
0f31eb632f map-agent: rename map-loop-detection to map-dynamic-backhaul 2021-10-28 16:23:13 +02:00
Stanislaw Gruszka
5c37dc2165 ieee1905: export cmdu_ackq.h 2021-10-28 12:48:19 +00:00
Erik Karlsson
b4ce04d317 map-controller: fix enabling via uci
The service must be started but without any instance in case it is
disabled via uci. If it is stopped entirely, the reload trigger does
not work and it is impossible to re-enable mapcontroller via uci
without explicit reload.
2021-10-28 07:09:23 +00:00
Erik Karlsson
1f817c4e8f map-agent: trigger reload on the right configuration file
Trigger reload, which is currently implemented as restart, when
mapagent rather than ieee1905 configuration is changed.
2021-10-28 07:09:23 +00:00
vdutta
26599ba94e uspd: Added get_supported_dm 2021-10-27 20:17:38 +05:30
vdutta
26fe0bc7de bbf: 6.1.3 2021-10-27 20:16:44 +05:30
Marek Puzyniak
37493eb8be easy-soc-libs: 6.4.6
Signed-off-by: Marek Puzyniak <marek.puzyniak@iopsys.eu>
2021-10-27 09:54:18 +00:00
vdutta
b3dda9b4e5 uspd: align with bbf changes 2021-10-27 13:27:00 +05:30
vdutta
94879c6de9 bbf: 6.1.2 2021-10-27 13:25:55 +05:30
vdutta
a15f586ecf icwmp: Fix raise condition for con-req 2021-10-26 20:04:02 +05:30
nevadita.chatterjee
f3c5face44 ieee1905: version 4.0.4 2021-10-26 15:43:00 +05:30
Jakob Olsson
4488510e4b map-agent: 6.0.8 2021-10-25 11:20:00 +02:00
vdutta
4685cb49d4 icwmpd: 8.2.4-2021-10-25 2021-10-25 12:16:35 +05:30
vdutta
6ad633cbf4 uspd: 2.1.29 2021-10-25 12:14:32 +05:30
vdutta
d97c335cb5 obuspa: Fix compilation errors for gcc 11 2021-10-25 12:03:48 +05:30
vdutta
3563683cec swmodd: Fix compilation error on gcc v11 2021-10-25 11:59:24 +05:30
vdutta
330bb08d1b bbf: 6.1.1 2021-10-25 11:57:29 +05:30
Jakob Olsson
93f2090d0e map-agent: 6.0.7 2021-10-22 16:58:33 +02:00
Jakob Olsson
d9ae18761b map-agent: map-loop-detection: speed up interface removal from bridge and harmonize disconnection 2021-10-22 16:56:15 +02:00
Jakob Olsson
40a1a45412 wifimngr: 05-wifi: publish wps over fronthauls when eth connected 2021-10-22 16:51:41 +02:00
Jakob Olsson
f459eaafb9 map-agent: 6.0.6 2021-10-22 15:21:56 +02:00
Jakob Olsson
a80ed328c3 map-controller: get source url from https 2021-10-22 15:19:04 +02:00
Jakob Olsson
15d9fc0339 map-agent: get source url from https 2021-10-22 15:11:26 +02:00
Amin Ben Ramdhane
916edb4ba3 bbf: 6.1.0 2021-10-22 12:56:13 +01:00
Amin Ben Ramdhane
eb67d5ab6e icwmp: 8.2.4-2021-10-22 2021-10-22 11:13:24 +01:00
Amin Ben Ramdhane
dd43b90e91 bulkdata: 1.0.3 2021-10-22 11:11:46 +01:00
Jakob Olsson
5fee9aa7b4 map-agent: multiap: enable bsta being swapped to 2021-10-22 10:28:32 +02:00
Jakob Olsson
b821c760df map-agent: multiap: implement swap to link function 2021-10-21 17:09:30 +02:00
Andreas Gnau
2dbcf3c75c Update feed [ iopsys ] package [ endptmngr ]
-------------------------------------------------------------------------------
* 6d7b2e9 Adapt Broadcom SDK 5.04 workaround version check to 5.04L.02p1
* f28a1b7 BCM: Adapt to SDK 5.04L.02p1 endpoint_api changes
-------------------------------------------------------------------------------
commit 6d7b2e9c90234767cb56a1e7885f42825bd6287a
Author: Andreas Gnau <andreas.gnau@iopsys.eu>
Date: 2021-10-20 17:43:37 +0200

    Adapt Broadcom SDK 5.04 workaround version check to 5.04L.02p1

    Adapt the version check for the workaround for BCM SDK 5.04 a9e612c (Add a
    workaround need for building with Broadcom 5.04., 2020-11-08) to cover BCM
    SDK 5.04L.02p1.

Base directory -> /
 src/Makefile | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
-------------------------------------------------------------------------------
commit f28a1b7b08a0bcc8faa2b25e1acebf811e05e87c
Author: Andreas Gnau <andreas.gnau@iopsys.eu>
Date: 2021-09-21 16:32:17 +0200

    BCM: Adapt to SDK 5.04L.02p1 endpoint_api changes

    In SDK 5.04L.02p1, Broadcom has changed rtcpXRMode in struct EPZCNXPARAM
    with a bitfield rtcpXRConfig which enables a more fine-grained control of
    the RTCP XR configuration.

    For now, set it to HAPI_RTP_RTCP_XR_GENERATE_VOIP_REPORT as recommended by
    the comment in endpoint_api.h. More bits to set can be found in hapi_rtp.h
    in the SDK.

Base directory -> /
 src/connection.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
-------------------------------------------------------------------------------
2021-10-20 17:59:05 +02:00
Jakob Olsson
952366cbc6 map-agent: multiap: write bssid for same bands when writing bsta section 2021-10-20 12:49:09 +02:00
Jakob Olsson
23a18999d5 ieee1905: 4.0.3 2021-10-20 10:11:43 +02:00
Jakob Olsson
2d2dffbec2 map-agent: 6.0.5 2021-10-20 10:08:24 +02:00
Sukru Senli
758ee8ec9f sulu: 0.2.20 2021-10-19 17:18:48 +02:00
Amin Ben Ramdhane
c38ce1be3b bbf: 6.0.9 2021-10-19 14:43:55 +01:00
Andreas Gnau
2b5332adc3 Update feed [ iopsys ] package [ fdtextract ]
-------------------------------------------------------------------------------
* ef46eb3 Add --image switch for getting attributes from image nodes. Also update the indentation and fix some minor naming issues.
-------------------------------------------------------------------------------
commit ef46eb3be68ae1216d8699234f237fb2243289f1
Author: Markus Gothe <markus.gothe@genexis.eu>
Date: 2021-10-14 10:22:48 +0200

    Add --image switch for getting attributes from image nodes. Also update the
    indentation and fix some minor naming issues.

Base directory -> /
 fdtextract.c  | 122 +++++++++++++++++++++++++++++++++++-----------------------
 util.c        |   2 +-
 version_gen.h |   2 +-
 3 files changed, 76 insertions(+), 50 deletions(-)
-------------------------------------------------------------------------------
2021-10-18 16:56:32 +02:00
Jakob Olsson
70c3d5d5e1 map-agent: multiap: comment out debug print 2021-10-18 13:17:09 +02:00
vdutta
df41990929 icwmp: Revert Init scripts enhancements and cleanup 2021-10-15 20:41:25 +05:30
Jakob Olsson
6edc7cbb94 map-controller: 5.0.3 2021-10-15 10:21:05 +02:00
Jakob Olsson
d7bffebd5b map-agent: 6.0.4 2021-10-15 10:21:05 +02:00
Jakob Olsson
8f81a71b57 ieee1905: 4.0.2 2021-10-15 10:21:05 +02:00
Jakob Olsson
9452ada64f map-agent: 6.0.3 2021-10-15 09:42:41 +02:00
Jakob Olsson
1a3d267ee1 map-agent: map-loop-detection: reconnect enabled supplicants 2021-10-15 09:35:46 +02:00
Jakob Olsson
2f6b40bdd2 map-agent: multiap: add dynamic backhaul funcs 2021-10-15 09:35:46 +02:00
Jakob Olsson
d1c2be5b08 map-agent: multiap: supress uci errors 2021-10-15 09:35:46 +02:00
vdutta
fdee0c734c icwmp: 8.2.4-2021-10-14 2021-10-14 22:01:48 +05:30
Sukru Senli
88513db735 questd: remove reload trigger 2021-10-14 16:12:01 +02:00
Amin Ben Ramdhane
8bdbefcc80 bbf: 6.0.8 2021-10-14 13:51:20 +01:00
Omar Kallel
ee33f0ae7d icwmp: 8.2.4-2021-10-13 2021-10-13 16:21:33 +01:00
Omar Kallel
5cd57a3ee9 Ticket refs #5876: icwmp: Init scripts enhancements and cleanup 2021-10-13 16:11:27 +01:00
Amin Ben Ramdhane
56a6cbf04a bbf: 6.0.7 2021-10-13 14:35:36 +01:00
Omar Kallel
1fb879fca0 icwmp: get dhcp 43 option in icwmp hotplug script instead of netifd package 2021-10-13 11:17:51 +01:00
Omar Kallel
a3fd03c390 icwmp: use both ipv4 and ipv6 addresses for firewall rules 2021-10-12 11:41:07 +01:00
Amin Ben Ramdhane
00594ba01e bbf: 6.0.6 2021-10-11 16:13:33 +01:00
Anjan Chanda
132bba5c20 wfa-capi: 1.0.0 2021-10-11 16:34:22 +02:00
Grzegorz Sluja
06f160af35 dectmngr: Fixes for registration and set HS name
0e937cf Set the HS name during registration if it has the name set in uci
62421c0 Do not send LocateSuggest req when registration mode is opened
2021-10-11 14:42:52 +02:00
Sukru Senli
04bf025b8f questd: remove deprecated router.network object 2021-10-11 09:54:59 +02:00
Sukru Senli
1daa8d7f1a iop: genconfig: remove references to juci 2021-10-11 09:49:07 +02:00
Sukru Senli
97a302a20a juci: remove deprecated package 2021-10-11 09:40:05 +02:00
Anjan Chanda
87a0fbe8bf wfadatad: 5.0.2 2021-10-08 21:48:36 +02:00
Yalu Zhang
54b4140e09 dectmngr 3.1.18: support DECT multiple line mode 2021-10-08 17:16:10 +02:00
vdutta
99267f902b bbf: 6.0.5 2021-10-08 12:45:53 +05:30
vdutta
0338a2fd7c uspd: Configure option for subprocess on get cmd 2021-10-08 11:12:10 +05:30
vdutta
e134a5ed08 obuspa: Align permission for set 2021-10-08 11:08:30 +05:30
vdutta
0d8f4a3de8 obuspa: Fail init if required data is missing 2021-10-08 11:01:47 +05:30
Jakob Olsson
d5e7cb1a28 map-controller: 5.0.2 2021-10-07 17:15:50 +02:00
Jakob Olsson
e995fcb14d map-agent: 6.0.2 2021-10-07 17:12:22 +02:00
vdutta
f865531fa5 bbf: 6.0.4 2021-10-07 17:11:26 +05:30
Markus Gothe
104f3e2e83 qosmngr: updated broadcom.sh to get the ports from the runner.
When using the runner accelerator we need to check how to
map between ethernet interfaces (i.e eth0) and the internal
names used by the runner (i.e. port/index=lan2). Depending on
the hardware the mapping is not always 1:1 as assumed earlier.

This commit also fixes a minor bug with resetting traffic
shaping for the archer accelerator.
2021-10-07 05:12:04 +00:00
Sukru Senli
d298757300 obudpst: install as udpst 2021-10-06 18:48:39 +02:00
vdutta
b66ade378a bbf: 6.0.3 2021-10-06 10:33:58 +05:30
Omar Kallel
be36f2e3e8 icwmp: uci enhancements 2021-10-05 14:37:52 +01:00
Anjan Chanda
00dc43eb39 map-agent: 6.0.1 2021-10-04 14:34:58 +02:00
Anjan Chanda
efeeb00a0a map-topology: 3.0.1 2021-10-04 14:18:57 +02:00
Anjan Chanda
cc5b7a8a17 wfadatad: 5.0.1 2021-10-04 14:18:19 +02:00
Anjan Chanda
ce8425ce70 map-controller: 5.0.1 2021-10-04 14:16:53 +02:00
Anjan Chanda
ce5b916828 ieee1905: 4.0.1 2021-10-04 14:01:39 +02:00
Anjan Chanda
7f04196f58 easy-soc-libs: 6.4.5 2021-10-04 14:01:13 +02:00
Stanislaw Gruszka
762d5a5daa map-agent: fix configuring ssid's and keys with spaces 2021-10-04 10:21:58 +00:00
Anjan Chanda
abc997d3f3 easy-soc-libs: 6.4.1 2021-10-03 21:16:14 +02:00
Markus Gothe
924b54d8d3 grpyhon-led-module: Add ability to read back color
To aid remote debugging we want to be able to
read back the set color on the RGB LED. This commit
implements this functionality.
2021-10-01 16:16:32 +00:00
Jakob Olsson
bd8dd65766 map-topology: 2.1.10 2021-10-01 16:08:21 +02:00
Jakob Olsson
5372956a9a map-agent: multiap: func to sync mapcontroller from wireless
To accomodate datamodel
2021-10-01 10:52:44 +02:00
Jakob Olsson
bf0ddc5321 map-agent: 5.4.2 2021-09-30 16:37:58 +02:00
Jakob Olsson
7895966aa2 map-agent: 5.4.1 2021-09-30 16:28:54 +02:00
Jakob Olsson
0f716b5197 map-controller: 4.2.6 2021-09-30 16:28:19 +02:00
Jakob Olsson
dd56712aa4 map-controller: 4.2.5 2021-09-30 16:28:19 +02:00
Jani Juvan
b7de0cf4bb map-agent: 5.4: traffic separation 2021-09-30 16:28:19 +02:00
Amin Ben Ramdhane
09f6449a6e bbf: 6.0.0 2021-09-30 15:19:19 +01:00
Andreas Gnau
f00e7fe965 iop: config: Use OpenSSL instead of WolfSSL for libustream
In IOPSYSWRT, we use OpenSSL. Instead of shipping WolfSSL just for the
OpenWrt libustream library (which powers the uclient-fetch / wget
commands), make libustream use OpenSSL as well. This decreases security
maintenance and reduces overhead in image size and memory usage.
2021-09-30 15:05:04 +02:00
vdutta
dd7aac2a8c swmodd: Fix compilation issues 2021-09-30 18:27:32 +05:30
130 changed files with 4714 additions and 2019 deletions

View File

@@ -1,5 +1,7 @@
if PACKAGE_libbbfdm
menu "Configuration"
config BBF_VENDOR_EXTENSION
bool "Enable Vendor Extension"
default y
@@ -24,4 +26,12 @@ config BBF_TR143
bool "Enable TR-143 Data Model Support"
default y
config BBFDM_ENABLE_JSON_PLUGIN
bool "Enable json plugin to extend datamodel"
default n
config BBFDM_ENABLE_DOTSO_PLUGIN
bool "Enable shared library plugin to extend datamodel"
default n
endmenu
endif

View File

@@ -5,11 +5,11 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libbbfdm
PKG_VERSION:=5.0.8
PKG_VERSION:=6.4.27
PKG_FIXUP:=autoreconf
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/bbf.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=3b1b7b37e0bc0eeec5c3da69773f16b9e4efa60b
PKG_SOURCE_VERSION:=710485a57e311a5b4c5434efe3e79fc58cb6c429
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
@@ -23,19 +23,19 @@ PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
define Package/libbbf_api
SECTION:=libs
CATEGORY:=Libraries
SUBMENU:=BBF
SECTION:=utils
CATEGORY:=Utilities
SUBMENU:=TRx69
TITLE:=Library for libbbfdm API
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c
endef
define Package/libbbfdm
SECTION:=libs
CATEGORY:=Libraries
SUBMENU:=BBF
SECTION:=utils
CATEGORY:=Utilities
SUBMENU:=TRx69
TITLE:=Library for broadband-forum data model
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libtrace +libbbf_api +libopenssl +libmbedtls +libcurl
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libtrace +libbbf_api +libopenssl +libcurl
endef
define Package/libbbfdm/config
@@ -81,11 +81,6 @@ CONFIGURE_ARGS += \
--enable-libopenssl
endif
ifeq ($(CONFIG_PACKAGE_libmbedtls),y)
CONFIGURE_ARGS += \
--enable-libmbedtls
endif
ifeq ($(CONFIG_BBF_VENDOR_EXTENSION),y)
CONFIGURE_ARGS += \
--enable-vendor-extension
@@ -96,36 +91,48 @@ CONFIGURE_ARGS += \
endif ##CONFIG_BBF_VENDOR_EXTENSION
ifeq ($(CONFIG_BBFDM_ENABLE_JSON_PLUGIN),y)
CONFIGURE_ARGS += \
--enable-json-plugin
endif
ifeq ($(CONFIG_BBFDM_ENABLE_DOTSO_PLUGIN),y)
CONFIGURE_ARGS += \
--enable-shared-library
endif
define Package/libbbf_api/install
$(INSTALL_DIR) $(1)/lib
$(CP) $(PKG_BUILD_DIR)/bin/.libs/libbbf_api.so* $(1)/lib/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/.libs/libbbf_api.so* $(1)/lib/
endef
define Package/libbbfdm/install
$(INSTALL_DIR) $(1)/lib
$(CP) $(PKG_BUILD_DIR)/bin/.libs/libbbfdm.so* $(1)/lib/
$(INSTALL_DIR) $(1)/usr/share/bbfdm
$(CP) $(PKG_BUILD_DIR)/scripts/* $(1)/usr/share/bbfdm
$(INSTALL_DIR) $(1)/etc/bbfdm
$(INSTALL_DIR) $(1)/etc/bbfdm/dmmap
$(INSTALL_DIR) $(1)/etc/bbfdm/json
$(INSTALL_DIR) $(1)/usr/lib/bbfdm
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/.libs/libbbfdm.so* $(1)/lib/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/* $(1)/usr/share/bbfdm
endef
define Package/libbbfdm/prerm
#!/bin/sh
rm -rf /etc/bbfdm/*
rm -rf /etc/bbfdm/dmmap/*
exit 0
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/include
$(INSTALL_DIR) $(1)/usr/include/libbbfdm
$(INSTALL_DIR) $(1)/usr/include/libbbf_api
$(CP) $(PKG_BUILD_DIR)/*.h $(1)/usr/include/libbbfdm/
$(CP) $(PKG_BUILD_DIR)/libbbf_api/*.h $(1)/usr/include/libbbf_api/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/bin/.libs/libbbfdm.{a,so*} $(1)/usr/lib/
$(CP) $(PKG_BUILD_DIR)/bin/.libs/libbbf_api.{a,so*} $(1)/usr/lib/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/include/*.h $(1)/usr/include/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/*.h $(1)/usr/include/libbbfdm/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/libbbf_api/*.h $(1)/usr/include/libbbf_api/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/.libs/libbbfdm.{a,so*} $(1)/usr/lib/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/.libs/libbbf_api.{a,so*} $(1)/usr/lib/
endef
$(eval $(call BuildPackage,libbbf_api))

View File

@@ -8,9 +8,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=bulkdata
PKG_VERSION:=1.0.2
PKG_VERSION:=1.0.3
PKG_SOURCE_VERSION:=150eb3122c969d1646c8ca8c8152154990f91823
PKG_SOURCE_VERSION:=b35e7862bc17fc11dc1f757c7b93900995a28633
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/bulkdata.git

View File

@@ -1,81 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=crun
PKG_VERSION:=0.20
PKG_RELEASE:=$(AUTORELEASE)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/containers/crun.git
PKG_SOURCE_DATE:=2021-06-07
PKG_SOURCE_VERSION:=8d6a8b5ab80461cfed19f020a36584af13c32038
PKG_MIRROR_HASH:=9ca1f0e530b33ce8820bd03329eb6731c5050d6e7f35bd2463d9a81cc00382e0
PKG_BUILD_DEPENDS:=argp-standalone
PKG_BUILD_PARALLEL:=1
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_MAINTAINER:=Oskari Rauta <oskari.rauta@gmail.com>
PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=COPYING
include $(INCLUDE_DIR)/package.mk
define Package/crun
SECTION:=utils
CATEGORY:=Utilities
TITLE:=crun
URL:=https://github.com/containers/crun
DEPENDS:=@!arc +libseccomp +libcap
endef
define Package/crun/description
A fast and low-memory footprint OCI Container Runtime fully written in C.
endef
CONFIGURE_ARGS+= \
--disable-systemd \
--enable-embedded-yajl \
--enable-caps \
--enable-dl \
--enable-seccomp \
--enable-bpf
define Build/Prepare
$(call Build/Prepare/Default)
$(SED) '/#include <git-version.h>/d' $(PKG_BUILD_DIR)/src/crun.c
endef
define Build/Configure
$(call Build/Configure/Default)
$(SED) '/#define PACKAGE \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define VERSION \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define GIT_VERSION \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define PACKAGE_BUGREPORT \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define PACKAGE_NAME \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define PACKAGE_STRING \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define PACKAGE_TARNAME \"/d' $(PKG_BUILD_DIR)/config.h
$(SED) '/#define PACKAGE_VERSION \"/d' $(PKG_BUILD_DIR)/config.h
echo "#define PACKAGE \"$(PKG_NAME)\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define VERSION \"$(PKG_VERSION)\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define PACKAGE_NAME \"$(PKG_NAME)\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define PACKAGE_VERSION \"$(PKG_VERSION)\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define PACKAGE_STRING \"$(PKG_NAME) $(PKG_VERSION)\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define PACKAGE_TARNAME \"$(PKG_NAME)\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define PACKAGE_BUGREPORT \"bugs@openwrt.org\"" >> $(PKG_BUILD_DIR)/config.h
echo "#define GIT_VERSION \"$(PKG_SOURCE_VERSION)\"" >> $(PKG_BUILD_DIR)/config.h
endef
define Package/crun/install
$(INSTALL_DIR) $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/crun $(1)/usr/bin/
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libcrun.* $(1)/usr/lib/
endef
$(eval $(call BuildPackage,crun))

11
dectmngr/Config.in Normal file
View File

@@ -0,0 +1,11 @@
if PACKAGE_dectmngr
menu "Configuration"
config ENABLE_LINE_SETTINGS_EXTENSION
bool "Enable Line Settings List extension "
default y
endmenu
endif

View File

@@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=dectmngr
PKG_RELEASE:=3
PKG_VERSION:=3.1.17
PKG_VERSION:=3.5.1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/dectmngr.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=0a0b9cb7ef5f82c6f129681a76d8ebc671b7cbd2
PKG_SOURCE_VERSION:=ef9d4c6124d0ca66f048f3d678d9a25f13aa4207
PKG_MIRROR_HASH:=skip
endif
@@ -34,29 +34,40 @@ include $(INCLUDE_DIR)/package.mk
define Package/$(PKG_NAME)
CATEGORY:=Utilities
TITLE:=DECT Manager
DEPENDS:= +libubox +ubus +uci
DEPENDS:= +libubox +ubus +uci +libxml2
endef
define Package/$(PKG_NAME)/description
DECT manager is a daemon that provides UBUS RPC objects and sends UBUS events for communication with the DECT chip.
endef
define Package/$(PKG_NAME)/config
source "$(SOURCE)/Config.in"
endef
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
rsync -av --exclude=.* ~/git/voip/dectmngr/* $(PKG_BUILD_DIR)/
endef
endif
MAKE_FLAGS += \
CFLAGS+="-Wall"
TARGET_CFLAGS += \
-Wall \
-I$(STAGING_DIR)/usr/include/libxml2
ifeq ($(CONFIG_ENABLE_LINE_SETTINGS_EXTENSION),y)
TARGET_CFLAGS += -DENABLE_LINE_SETTINGS_EXTENSION
endif
define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/app/dectmngr $(1)/usr/sbin/
$(STRIP) $(1)/usr/sbin/dectmngr
$(CP) ./files/etc/* $(1)/etc/
$(INSTALL_DATA) ./files/lib/upgrade/keep.d/dect $(1)/lib/upgrade/keep.d/dect
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

View File

@@ -1,2 +1,3 @@
config dect 'global'
option log_dect_cmbs '0'
option log_dect_cmbs 'syslog'
option log_level 'realtime,warning,error'

Binary file not shown.

Binary file not shown.

View File

@@ -26,6 +26,7 @@ start_service() {
local opt_ext=
local rfpi=
local model_id=
local rxtun=
test $(db get hw.board.hasDect) = "0" && return
@@ -34,24 +35,33 @@ start_service() {
rfpi=$(db -q get hw.board.dect_rfpi)
[ -n "$rfpi" -a ${#rfpi} -eq 14 ] && opt_ext="$opt_ext -rfpi $rfpi"
# model_id=$(db -q get hw.board.dect_model_id)
# Setting model_id to 0x010203 is a workaround to reduce synchronisation time of some handset
# TODO: remove below line and uncomment the line above to get value from db when the problem is solved
model_id="01.02.03"
[ -n "$model_id" -a ${#model_id} -eq 8 ] && opt_ext="$opt_ext -model $model_id"
model_id=$(db -q get hw.board.dect_model_id)
[ -n "$model_id" -a ${#model_id} -eq 8 ] || {
echo "Invalid hw.board.dect_model_id:$model_id. Set to 30.3B.06"
model_id="30.3B.06"
}
opt_ext="$opt_ext -model $model_id"
rxtun=$(db -q get hw.board.dect_rxtun)
[ -n "$rxtun" -a ${#rxtun} -eq 2 ] && opt_ext="$opt_ext -rxtun $rxtun"
config_load dect
config_get_bool log_dect_cmbs global log_dect_cmbs 0
config_get log_dect_cmbs global log_dect_cmbs syslog
procd_open_instance
if [ $log_dect_cmbs -eq 0 ]; then
if [ "$log_dect_cmbs" = "none" ]; then
echo "Starting dectmngr with cmbs logging disabled"
procd_set_param command $PROG -comname ttyH0 $opt_ext
rm -f $LOG_PATH/*
else
echo "Starting dectmngr with cmbs logging enabled"
elif [ "$log_dect_cmbs" = "file" ]; then
echo "Starting dectmngr with cmbs logging enabled to file"
procd_set_param command $PROG -comname ttyH0 -log $LOG_PATH/dect-cmbs.log $opt_ext
else
echo "Starting dectmngr with cmbs logging enabled to syslog"
procd_set_param command $PROG -comname ttyH0 -syslog $opt_ext
rm -f $LOG_PATH/*
fi
procd_set_param respawn 6 2 3
procd_set_param term_timeout 20
procd_set_param triggers asterisk
@@ -66,13 +76,13 @@ stop_service() {
}
reload_service() {
stop_and_wait_dectmngr
start
ubus call dect reload
}
service_triggers()
{
procd_add_reload_trigger asterisk dect
procd_add_config_trigger "config.change" "asterisk" /etc/init.d/dectmngr restart
procd_add_config_trigger "config.change" "dect" /etc/init.d/dectmngr reload
}
boot() {

View File

@@ -0,0 +1 @@
/etc/dect/LA_DB

View File

@@ -33,7 +33,7 @@ exec_class_log() {
}
get_priority() {
local prio=$(echo $1|tr [A-Z] [a-z]);
local prio=$(echo $1|tr 'A-Z' 'a-z');
case "${prio}" in
"lowest")
echo 8;;
@@ -55,7 +55,7 @@ get_priority() {
}
get_mark() {
local prio=$(echo $1|tr [A-Z] [a-z]);
local prio=$(echo $1|tr 'A-Z' 'a-z');
case "${prio}" in
"lowest")
echo "0x41/0x3df";;

View File

@@ -15,7 +15,7 @@ exec_log() {
}
get_priority() {
local prio=$(echo $1|tr [A-Z] [a-z]);
local prio=$(echo $1|tr 'A-Z' 'a-z');
case "${prio}" in
"lowest")
echo 0;;
@@ -98,7 +98,7 @@ manage_rule() {
return 1;
}
protocol=$(echo ${proto}|tr [A-Z] [a-z])
protocol=$(echo ${proto}|tr 'A-Z' 'a-z')
prio_num=$(get_priority ${priority})
if [ -n "${macaddr}" -a -n "${prio_num}" ]; then
for p in ${port}; do

View File

@@ -19,7 +19,7 @@ exec_log() {
}
get_priority() {
local prio=$(echo $1|tr [A-Z] [a-z]);
local prio=$(echo $1|tr 'A-Z' 'a-z');
case "${prio}" in
"lowest")
echo 0;;

View File

@@ -7,13 +7,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=easy-soc-libs
PKG_VERSION:=6.3.4
PKG_VERSION:=6.4.40
PKG_RELEASE:=1
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=a82d64c15dec32e032ff36f6b9bbbb707010c93e
PKG_SOURCE_VERSION:=699744d5ae9e043715c260f9b58bbc18747895f9
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/easy-soc-libs.git
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
@@ -32,7 +32,6 @@ define Package/easy-soc-libs
CATEGORY:=Libraries
TITLE:=IOPSYS Easy SoC libraries
SUBMENU:=IOPSYS Easy SoC libraries
DEPENDS:=+libopenssl
MENU:=1
endef
@@ -79,7 +78,6 @@ endif
TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include \
-I$(STAGING_DIR)/usr/include/openssl \
-I$(STAGING_DIR)/usr/include/libnl3
MAKE_FLAGS += \

View File

@@ -18,6 +18,7 @@ define Build/InstallDev/libeasy
$(CP) $(PKG_BUILD_DIR)/libeasy/utils.h $(1)/usr/include/easy/
$(CP) $(PKG_BUILD_DIR)/libeasy/if_utils.h $(1)/usr/include/easy/
$(CP) $(PKG_BUILD_DIR)/libeasy/debug.h $(1)/usr/include/easy/
$(CP) $(PKG_BUILD_DIR)/libeasy/hlist.h $(1)/usr/include/easy/
$(CP) $(PKG_BUILD_DIR)/libeasy/libeasy*.so* $(1)/usr/lib/
endef

View File

@@ -7,13 +7,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=endptmngr
PKG_VERSION:=0.5
PKG_VERSION:=0.6
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/endptmngr.git
PKG_SOURCE_VERSION:=debfc47348d6e1fc1c8b126ad50a7f5f8db3e19d
PKG_SOURCE_VERSION:=3a71d4124061287783e0d4c763b1b20e925d2133
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
@@ -30,7 +30,7 @@ PKG_BUILD_PARALLEL:=1
# indirectly. This ensures that the package is rebuilt on config-changes.
PKG_CONFIG_DEPENDS:=CONFIG_TARGET_BOARD
export CONFIG_BRCM_SDK_VER_504002
export CONFIG_BRCM_SDK_VER_504021
export CONFIG_BCM_CHIP_ID
include $(INCLUDE_DIR)/package.mk

View File

@@ -7,6 +7,8 @@ USE_PROCD=1
NAME=endptmngr
start_service() {
[ "$(db -q get hw.board.hasVoice)" = "1" ] || return
procd_open_instance
procd_set_param env hw_board_hasDect=$(db get hw.board.hasDect)
procd_set_param command $NAME

View File

@@ -12,7 +12,7 @@ PKG_VERSION:=1.0
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/fdtextract.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=45575262de7a9690bcb2c760f35e2c74e88e1176
PKG_SOURCE_VERSION:=7e013f0afa68378d38a6bdc9b0c5a342bd3dd0a5
PKG_MIRROR_HASH:=skip
PKG_LICENSE:=GPLv2

View File

@@ -28,6 +28,7 @@ define KernelPackage/$(PKG_NAME)
FILES:=$(PKG_BUILD_DIR)/$(PKG_NAME).$(LINUX_KMOD_SUFFIX)
KCONFIG:=CONFIG_PACKAGE_kmod-gryphon-led-kernel-module=y
AUTOLOAD:=$(call AutoLoad,60,$(PKG_NAME))
DEPENDS:= +(TARGET_iopsys_brcm63xx_arm):bcmkernel
PKG_LICENSE:=GPLv2
PKG_LICENSE_URL:=
endef
@@ -40,6 +41,21 @@ EXTRA_KCONFIG:= CONFIG_RGB_LED=m
MODULE_INCLUDE=-I$(PKG_BUILD_DIR)
ifeq ($(CONFIG_TARGET_iopsys_brcm63xx_arm),y)
LINUX_DIR:=$(BUILD_DIR)/bcmkernel/bcm963xx/kernel/linux-4.19
MODULES_SUBDIR:=lib/modules/4.19.183
TARGET_CROSS:=$(CONFIG_BCM_TOOLCHAIN)/bin/$(CONFIG_BCM_TOOLTUPLE)
ifeq ($(CONFIG_BCM_CHIP_ID),$(filter $(CONFIG_BCM_CHIP_ID),"63158" "6856" "6858"))
# These targets use a 64-bit kernel
LINUX_KARCH:=arm64
TARGET_CROSS:=/opt/toolchains/crosstools-aarch64-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/bin/aarch64-buildroot-linux-gnu-
endif
# For some reason, Broadcom's kernel does not set the include paths correctly when compiling out-of-tree modules
EXTRA_KCPPFLAGS:="-I $(LINUX_DIR)/../bcmkernel/include -I $(LINUX_DIR)/arch/arm/mach-bcm963xx/include"
endif
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)/kdevlinks/
$(CP) -s `pwd`/src/* $(PKG_BUILD_DIR)/kdevlinks/

View File

@@ -43,10 +43,15 @@
static ssize_t get_led_color(struct device *dev,
struct device_attribute *attr, char *buf)
{
/* [ln] todo: dummy implementation */
int len;
struct sk9822_leds *sk9822 = dev_get_drvdata(dev);
len = scnprintf(buf, PAGE_SIZE, "%d\n", 123);
if (IS_ERR(sk9822)) {
printk(KERN_ERR "Platform get drvdata returned NULL\n");
return -EIO;
}
len = scnprintf(buf, PAGE_SIZE, "%02x%02x%02x\n", sk9822->led_colors[0].r, sk9822->led_colors[0].g, sk9822->led_colors[0].b);
if (len <= 0) {
dev_err(dev, "sk9822: Invalid sprintf len: %d\n", len);
return -EIO;

View File

@@ -1,5 +1,6 @@
if PACKAGE_icwmp
menu "Configuration"
choice
prompt "Select ACS sever"
default CWMP_ACS_MULTI
@@ -18,6 +19,6 @@ config CWMP_DEBUG
config CWMP_DEVEL_DEBUG
bool "Compile with development debug options"
default n
endmenu
endif

View File

@@ -8,11 +8,11 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=icwmp
PKG_VERSION:=8.1.10-2021-09-25
PKG_VERSION:=8.2.27
PKG_FIXUP:=autoreconf
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/icwmp.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=2e55c12d13af617f9c5b1551e9d67287efd52715
PKG_SOURCE_VERSION:=da88c8c28656b2db54ab205d26faccda68546c05
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
@@ -82,19 +82,18 @@ define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/etc/icwmpd
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/icwmpd $(1)/usr/sbin/icwmpd
$(INSTALL_DATA) ./files/etc/config/cwmp $(1)/etc/config/cwmp
$(INSTALL_BIN) ./files/etc/firewall.cwmp $(1)/etc/firewall.cwmp
$(INSTALL_BIN) ./files/etc/hotplug.d/iface/90-icwmp $(1)/etc/hotplug.d/iface/90-icwmp
$(INSTALL_BIN) ./files/etc/init.d/icwmpd $(1)/etc/init.d/icwmpd
$(INSTALL_BIN) ./files/etc/uci-defaults/85-cwmp-set-userid $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/90-cwmpfirewall $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/90-icwmp-set-dhcp-reqopts $(1)/etc/uci-defaults/
$(INSTALL_BIN) ./files/etc/uci-defaults/95-icwmp-generate-ssl $(1)/etc/uci-defaults/
$(INSTALL_DATA) ./files/lib/upgrade/keep.d/icwmp $(1)/lib/upgrade/keep.d/icwmp
$(INSTALL_BIN) ./files/etc/icwmpd/update.sh $(1)/etc/icwmpd/update.sh
endef
$(eval $(call BuildPackage,$(PKG_NAME)))

View File

@@ -1,11 +1,9 @@
config acs 'acs'
option url ''
option userid '' #$OUI-$SER
option passwd 'iopsys'
option periodic_inform_enable 'true'
option periodic_inform_interval '1800'
option periodic_inform_time '0001-01-01T00:00:00Z'
option ParameterKey ''
option dhcp_discovery 'enable'
# compression possible configs: GZIP, Deflate, Disabled
option compression 'Disabled'

View File

@@ -1,42 +1,42 @@
#!/bin/sh
#created by the icwmp package
log() {
echo "${@}"|logger -t firewall.cwmp -p info
}
if [ ! -f "/var/state/cwmp" ]; then
touch "/var/state/cwmp"
exit 0;
fi
zone_name=$(uci -P /var/state -q get cwmp.acs.zonename)
port=$(uci -P /var/state -q get cwmp.acs.port)
ipaddr=$(uci -P /var/state -q get cwmp.acs.ip)
ipv6enable=$(uci -P /var/state -q get cwmp.acs.ipv6enable)
incoming_rule=$(uci -q get cwmp.cpe.incoming_rule|tr [A-Z] [a-z])
zone_name=$(uci -c /var/state -q get cwmp.acs.zonename)
port=$(uci -q get cwmp.cpe.port)
ipaddr=$(uci -c /var/state -q get cwmp.acs.ip)
ip6addr=$(uci -c /var/state -q get cwmp.acs.ip6)
incoming_rule=$(uci -q get cwmp.cpe.incoming_rule|tr 'A-Z' 'a-z')
if [ "$zone_name" = "" ]; then
if [ -z "${zone_name}" ]; then
log "empty firewall zone name"
exit 0
elif [ "$zone_name" = "icwmp" ]; then
iptables -nL zone_icwmp_input 2> /dev/null
if [ $? != 0 ]; then
iptables -N zone_icwmp_input
iptables -t filter -A INPUT -j zone_icwmp_input
iptables -I zone_icwmp_input -p tcp --dport $port -j REJECT
iptables -w 1 -N zone_icwmp_input
iptables -w 1 -t filter -A INPUT -j zone_icwmp_input
iptables -w 1 -I zone_icwmp_input -p tcp --dport $port -j REJECT
else
iptables -F zone_icwmp_input
iptables -I zone_icwmp_input -p tcp --dport $port -j REJECT
iptables -w 1 -F zone_icwmp_input
iptables -w 1 -I zone_icwmp_input -p tcp --dport $port -j REJECT
fi
else
iptables -F zone_icwmp_input 2> /dev/null
iptables -t filter -D INPUT -j zone_icwmp_input 2> /dev/null
iptables -X zone_icwmp_input 2> /dev/null
iptables -w 1 -F zone_icwmp_input 2> /dev/null
iptables -w 1 -t filter -D INPUT -j zone_icwmp_input 2> /dev/null
iptables -w 1 -X zone_icwmp_input 2> /dev/null
fi
cmd=""
if [ "${ipv6enable}" = "1" ]; then
cmd="ip6tables"
else
cmd="iptables"
fi
cmd="${cmd} -I zone_${zone_name}_input -p tcp"
cmd="iptables -w 1 -I zone_${zone_name}_input -p tcp"
cmd6="ip6tables -w 1 -I zone_${zone_name}_input -p tcp"
# default incoming rule is Port only
if [ -z "${incoming_rule}" ]; then
@@ -46,26 +46,36 @@ fi
if [ "${incoming_rule}" = "ip_only" ]; then
if [ -n "${ipaddr}" ]; then
cmd="${cmd} -s ${ipaddr}"
cmd6="${cmd6} -s ${ip6addr}"
fi
elif [ "${incoming_rule}" = "port_only" ]; then
if [ -n "${port}" ]; then
cmd="${cmd} --dport ${port}"
cmd6="${cmd6} --dport ${port}"
fi
else
if [ -n "${ipaddr}" ]; then
cmd="${cmd} -s ${ipaddr}"
cmd6="${cmd6} -s ${ip6addr}"
fi
if [ -n "${port}" ]; then
cmd="${cmd} --dport ${port}"
cmd6="${cmd6} --dport ${port}"
fi
fi
echo ${cmd}|grep -q "\-\-dport \|\-s "
if [ "$?" -ne 0 ]; then
exit 0;
if [ "$?" -eq 0 ]; then
cmd="${cmd} -j ACCEPT -m comment --comment=Open_ACS_port"
${cmd}
fi
cmd="${cmd} -j ACCEPT -m comment --comment=Open_ACS_port"
echo ${cmd6}|grep -q "\-\-dport \|\-s "
if [ "$?" -eq 0 ]; then
cmd6="${cmd6} -j ACCEPT -m comment --comment=Open_ACS_port"
${cmd6}
fi
${cmd}
uci -c /var/state -q set cwmp.cpe.firewall_restart="init"
uci -c /var/state -q commit cwmp

View File

@@ -1,89 +0,0 @@
#!/bin/sh
. /lib/functions/network.sh
[ "$ACTION" == "ifup" ] || exit 0
[ -f /etc/config/cwmp ] || exit 0
handle_icwmp_restart() {
[ -f /tmp/switching_mode ] && exit 0
[ -f /tmp/wificontrol.txt -a -f /tmp/netmode-conf.pid ] && exit 0
[ "$INTERFACE" == "loopback" ] && exit 0
local defwan=$(uci -q get cwmp.cpe.default_wan_interface)
[ -n "$defwan" -a "$(uci -q get network.$defwan)" == "interface" -a "$defwan" != "$INTERFACE" ] && exit 0
local islan="$(uci -q get network.$INTERFACE.is_lan)"
[ "$islan" == "1" ] && exit 0
local proto="$(uci -q get network.$INTERFACE.proto)"
[ "$proto" == "none" ] && exit 0
local ifname="$(uci -q get network.$INTERFACE.ifname)"
[ "${ifname:0:1}" == "@" ] && exit 0
mkdir -p /tmp/ipv4
network_flush_cache
local previpaddr=""
local curipaddr=""
local ipaddrfile=/tmp/ipv4/$INTERFACE-ipaddr
previpaddr=$(cat $ipaddrfile 2>/dev/null)
network_get_ipaddr curipaddr $INTERFACE
[ -n "$curipaddr" ] && echo $curipaddr > $ipaddrfile || rm -f $ipaddrfile
local prevgateway=""
local curgateway=""
local gatewayfile=/tmp/ipv4/$INTERFACE-gateway
prevgateway=$(cat $gatewayfile 2>/dev/null)
network_get_gateway curgateway $INTERFACE
[ -n "$curgateway" ] && echo $curgateway > $gatewayfile || rm -f $gatewayfile
local prevsubnets=""
local cursubnets=""
local subnetsfile=/tmp/ipv4/$INTERFACE-subnets
prevsubnets=$(cat $subnetsfile 2>/dev/null)
network_get_subnets cursubnets $INTERFACE
[ -n "$cursubnets" ] && echo $cursubnets > $subnetsfile || rm -f $subnetsfile
local prevdnsservers=""
local curdnsservers=""
local dnsserverfile=/tmp/ipv4/$INTERFACE-dnsservers
prevdnsservers=$(cat $dnsserverfile 2>/dev/null)
network_get_dnsserver curdnsservers $INTERFACE
[ -n "$curdnsservers" ] && echo $curdnsservers > $dnsserverfile || rm -f $dnsserverfile
local prevdev=""
local curdev=""
local devfile=/tmp/ipv4/$INTERFACE-dev
prevdev=$(cat $devfile 2>/dev/null)
network_get_device curdev $INTERFACE
[ -n "$curdev" ] && echo $curdev > $devfile || rm -f $devfile
local prevopt43url=""
local curopt43url=""
local opt43urlfile=/tmp/ipv4/$INTERFACE-opt43url
prevopt43url=$(cat $opt43urlfile 2>/dev/null)
curopt43url="$(uci -P /var/state -q get cwmp.acs.dhcp_url)"
[ -n "$curopt43url" ] && echo $curopt43url > $opt43urlfile || rm -f $opt43urlfile
[ \
"$prevdev" == "$curdev" -a \
"$previpaddr" = "$curipaddr" -a \
"$prevgateway" = "$curgateway" -a \
"$prevsubnets" = "$cursubnets" -a \
"$prevdnsservers" = "$curdnsservers" \
] && {
[ "$prevopt43url" = "$curopt43url" ] && exit 0
[ -z "$prevopt43url" ] && exit 0
}
echo "Restarting icwmp"|logger -t cwmp.hotplug -p info
/etc/init.d/icwmpd reload &
}
handle_icwmp_restart

View File

@@ -0,0 +1,43 @@
#!/bin/sh
log() {
echo $@ |logger -t cwmp.update -p info
}
handle_icwmp_update() {
local defwan=$(uci -q get cwmp.cpe.default_wan_interface)
local vendorspecinf=`ifstatus ${defwan} | jsonfilter -e "@.data.vendorspecinf"`
log "Handling dhcp option value ${vendorspecinf}"
[ -n "$vendorspecinf" ] && {
local url=""
local old_url="$(uci -q get cwmp.acs.dhcp_url)"
case $vendorspecinf in
http://*|https://*)
url="${vendorspecinf}"
;;
*)
for optval in $vendorspecinf; do
case $optval in
1=*)
url="$(echo $optval | cut -d"=" -f2-)"
;;
esac
done
;;
esac
if [ -n "$url" ]; then
log "## icwmp url[${old_url}] changed to [${url}]"
if [ "${url}" != "${old_url}" ]; then
log "Restarting icwmp url[${old_url}] changed to [${url}]"
uci -q set cwmp.acs.dhcp_url="$url"
uci commit cwmp
ubus call uci commit '{"config":"cwmp"}'
fi
fi
}
}
handle_icwmp_update

View File

@@ -6,125 +6,41 @@ include /lib/network
. /usr/share/libubox/jshn.sh
START=99
STOP=10
STOP=2
USE_PROCD=1
PROG="/usr/sbin/icwmpd"
EXTRA_HELP=" start [GetRPCMethods] Start icwmpd service and send GetRPCMethods"
log() {
echo "${@}"|logger -t cwmp.init -p info
}
validate_url() {
# SCHEMA_LIST: contain list of possible schemas that could be present in the acs url
# Example: SCHEMA_LIST="http https"
SCHEMA_LIST="http"
for schema in $SCHEMA_LIST; do
dest=`echo $1 | sed 's/$schema:\/\///g' | cut -f1 -d \/ | cut -f1 -d:`
if [ "_$dest" != "_" ]; then
return 0
fi
done
return 1
}
get_acs_url() {
local default_acs="http://10.10.1.6:8000/openacs/acs"
local acs_dhcp_discovery="$(uci -q get cwmp.acs.dhcp_discovery)"
local url="$(uci -q get cwmp.acs.url)"
local dhcp_url="$(uci -P /var/state -q get cwmp.acs.dhcp_url)"
if [ "$acs_dhcp_discovery" == "enable" -a -n "$dhcp_url" -o -z "$url" ]; then
url="$dhcp_url"
log "ACS URL from DHCP server: $url"
[ -n "$url" ] && uci -P /var/state -q set cwmp.acs.url="$url" || url="$default_acs"
elif [ -n "$url" ];then
url="$(uci -q get cwmp.acs.url)"
log "ACS URL from configuration: $url"
else
url="$default_acs"
log "Using default ACS URL: $url"
[ -n "$url" ] && uci -P /var/state -q set cwmp.acs.url="$url"
fi
validate_url "$url"
if [ "$?" != "0" ];then
echo "Invalid ACS URL: $url"
exit 1
fi
}
enable_dhcp_option43() {
local wan=$1
local discovery=0
case $2 in
enable|1) discovery=1 ;;
esac
local wan="${1}"
### Ask for DHCP Option 43 only if CWMP is enabled ###
local enabled
local newreqopts=
local baseopts=
local reqopts="$(uci -q get network.$wan.reqopts)"
local proto="$(uci -q get network.$wan.proto)"
local tropts="43"
local oldreqopts="$reqopts"
local ropt iopt
local newreqopts=""
local option43_present=0
for ropt in $reqopts; do
case $ropt in
43) ;;
*) baseopts="$baseopts $ropt" ;;
esac
done
ropt=""
reqopts="$baseopts $tropts"
for ropt in $reqopts; do
case $ropt in
43) [ $discovery -eq 1 ] && newreqopts="$newreqopts $ropt" ;;
*) newreqopts="$newreqopts $ropt" ;;
43) option43_present=1 ;;
*) ;;
esac
done
if [ ${option43_present} -eq 1 ]; then
return;
fi
newreqopts="$reqopts 43"
if [ $proto == "dhcp" ]; then
newreqopts="$(echo $newreqopts | tr ' ' '\n' | sort -n | tr '\n' ' ' | sed 's/^[ \t]*//;s/[ \t]*$//')"
oldreqopts="$(echo $oldreqopts | tr ' ' '\n' | sort -n | tr '\n' ' ' | sed 's/^[ \t]*//;s/[ \t]*$//')"
[ "$newreqopts" == "$oldreqopts" ] && return
uci -q set network.$wan.reqopts="$newreqopts"
uci commit network
ubus call network reload
fi
########################################################
}
wait_for_option43() {
local time=$1
local default_wan_interface dhcp_discovery url
config_get default_wan_interface cpe default_wan_interface "wan"
config_get dhcp_discovery acs dhcp_discovery "0"
config_get url acs url
enable_dhcp_option43 $default_wan_interface $dhcp_discovery
local tm=0
if [ "$dhcp_discovery" == "enable" -o "$dhcp_discovery" == "1" ]
then
log "Waiting for discovery of ACS URL from dhcp server ..."
while [ $tm -le $time ]
do
acs_url=`uci -P /var/state -q get cwmp.acs.dhcp_url`
if [ "$acs_url" != "" ]
then
break
else
sleep 1
fi
tm=$((tm+1))
done
fi
}
wait_for_resolvfile() {
@@ -142,62 +58,215 @@ wait_for_resolvfile() {
}
set_wan_interface() {
local wan_interface="${1}"
local l3_device=""
local default_wan_interface=""
config_get default_wan_interface cpe default_wan_interface "wan"
json_load "$(ifstatus $default_wan_interface)"
if [ -z "${wan_interface}" ]; then
return 0;
fi
json_load "$(ifstatus ${wan_interface})"
json_get_var l3_device l3_device
if [ "$l3_device" != "" ];then
uci -q set cwmp.cpe.interface="$l3_device"
if [ -n "$l3_device" ]; then
uci -q set cwmp.cpe.interface="${l3_device}"
uci -q commit cwmp
fi
}
service_running() {
ubus wait_for usp.raw
}
start_service() {
if [ ! -f /tmp/.icwmpd_boot ]; then
touch /etc/icwmpd/.icwmpd_boot
touch /tmp/.icwmpd_boot
else
[ -f /sbin/netifd ] && log "Waiting for Network to be started ..." && ubus -t 5 wait_for network.interface
[ -f /etc/config/wireless ] && log "Waiting for WiFi to be started ..." && ubus -t 5 wait_for network.wireless
[ -f /usr/sbin/dnsmasq ] && log "Waiting for DNS Proxy to be started ..." && ubus -t 5 wait_for dnsmasq
[ -f /etc/config/dhcp ] && log "Waiting for DNS Server(s) ..." && wait_for_resolvfile 20
[ -f /usr/sbin/asterisk ] && log "Waiting for Voice to be started ..." && ubus -t 5 wait_for asterisk
log "Waiting for usp.raw to be started"
ubus wait_for usp.raw
config_load cwmp
set_wan_interface
wait_for_option43 20
get_acs_url
procd_open_instance icwmp
procd_set_param command "$PROG"
if [ "$1" = "GetRPCMethods" ];then
procd_append_param command -g
elif [ -f /etc/icwmpd/.icwmpd_boot ]; then
procd_append_param command -b
copy_cwmp_etc_files_to_varstate() {
if [ ! -f /var/state/cwmp ]
then
if [ -f /etc/icwmpd/cwmp ]
then
uci -q -c /etc/icwmpd delete cwmp.acs
uci -q -c /etc/icwmpd commit cwmp
cp /etc/icwmpd/cwmp /var/state/cwmp
else
touch /var/state/cwmp
fi
procd_set_param respawn \
${respawn_threshold:-5} \
${respawn_timeout:-10} ${respawn_retry:-3}
fi
procd_close_instance
mkdir -p /var/run/icwmpd
if [ -f /etc/icwmpd/icwmpd_backup_session.xml ]
then
mv /etc/icwmpd/icwmpd_backup_session.xml /var/run/icwmpd 2>/dev/null
fi
if [ -f /etc/icwmpd/dm_enabled_notify.xml ]
then
mv /etc/icwmpd/dm_enabled_notify /var/run/icwmpd 2>/dev/null
fi
}
copy_cwmp_varstate_files_to_etc() {
if [ -f /var/state/cwmp ]
then
cp /var/state/cwmp /etc/icwmpd 2>/dev/null
fi
if [ -f /var/run/icwmpd/icwmpd_backup_session.xml ]
then
cp /var/run/icwmpd/icwmpd_backup_session.xml /etc/icwmpd 2>/dev/null
fi
if [ -f /var/run/icwmpd/dm_enabled_notify.xml ]
then
cp /var/run/icwmpd/dm_enabled_notify /etc/icwmpd 2>/dev/null
fi
}
validate_acs_section()
{
uci_validate_section cwmp acs "acs" \
'passwd:string' \
'periodic_inform_enable:bool' \
'periodic_inform_interval:uinteger' \
'periodic_inform_time:string' \
'url:string' \
'dhcp_url:string' \
'compression:or("GZIP","Deflate","Disabled")' \
'retry_min_wait_interval:range(1, 65535)' \
'retry_interval_multiplier:range(1000, 65535)' \
'https_ssl_capath:file' \
'ipv6_enable:bool'
}
validate_cpe_section()
{
uci_validate_section cwmp cpe "cpe" \
'interface:string' \
'default_wan_interface:string' \
'log_to_console:or("enable","disable")' \
'log_to_file:or("enable","disable")' \
'log_severity:or("EMERG", "ALERT", "CRITIC" ,"ERROR", "WARNING", "NOTICE", "INFO", "DEBUG")' \
'log_file_name:string' \
'log_max_size:uinteger' \
'userid:string' \
'passwd:string' \
'port:uinteger' \
'provisioning_code:string:""' \
'amd_version:range(1, 6)' \
'instance_mode:or("InstanceNumber","InstanceAlias")' \
'session_timeout:uinteger' \
'notification:bool' \
'exec_download:bool' \
'periodic_notify_enable:bool' \
'enable:bool' \
'periodic_notify_interval:uinteger'
}
validate_defaults() {
config_load cwmp
validate_acs_section || {
log "Validation of acs section failed"
return 1;
}
[ -z "${url}" -a -z "${dhcp_url}" ] && {
log "ACS url is empty can't start"
return 1;
}
validate_cpe_section || {
log "Validation of cpe section failed"
return 1;
}
[ -z "${default_wan_interface}" ] && {
log "Wan interface is empty"
return 1;
}
return 0;
}
boot() {
local dhcp_url=""
local discovery="1"
config_load cwmp
config_get_bool dhcp_discovery acs dhcp_discovery 1
config_get dhcp_url acs dhcp_url ""
if [ "${dhcp_discovery}" == "enable" -o "${dhcp_discovery}" == "1" ]; then
if [ -z "${dhcp_url}" ]; then
log "dhcp discovery enabled but no dhcp url, trigger update"
/etc/icwmpd/update.sh
fi
fi
start
}
start_service() {
local enable_cwmp
local wan_interface
local dhcp_discovery
config_load cwmp
config_get_bool enable_cwmp cpe enable 1
config_get dhcp_discovery acs dhcp_discovery
config_get wan_interface cpe default_wan_interface "wan"
if [ "$enable_cwmp" = "0" -o "$enable_cwmp" = "false" ]; then
log "CWMP is not enabled"
return 0
fi
# Set wan interface if not configured
set_wan_interface "${wan_interface}"
# Set dhcp option 43 if dhcp discovery enabled
if [ "${dhcp_discovery}" == "enable" -o "${dhcp_discovery}" == "1" ]; then
enable_dhcp_option43 "${wan_interface}"
fi
[ -f /sbin/netifd ] && log "Waiting for Network to be started ..." && ubus -t 5 wait_for network.interface
[ -f /usr/sbin/dnsmasq ] && log "Waiting for DNS Proxy to be started ..." && ubus -t 5 wait_for dnsmasq
[ -f /etc/config/dhcp ] && log "Waiting for DNS Server(s) ..." && wait_for_resolvfile 20
# Copy backup data so that if it restart latter on it gets the info
copy_cwmp_etc_files_to_varstate
validate_defaults || {
log "Validation of defaults failed"
return 1;
}
procd_open_instance icwmp
procd_set_param command "$PROG"
procd_append_param command -b
procd_set_param respawn \
${respawn_threshold:-5} \
${respawn_timeout:-10} ${respawn_retry:-3}
procd_set_param watch network.interface
procd_close_instance
}
stop_service()
{
copy_cwmp_varstate_files_to_etc
}
reload_service() {
log "Restarting CWMP client"
stop
start
}
service_triggers() {
procd_add_config_trigger "config.change" "cwmp" /etc/init.d/icwmpd reload
procd_add_reload_trigger "cwmp"
procd_open_trigger
json_add_array
json_add_string "" "interface.update"
json_add_array
json_add_array
json_add_string "" "run_script"
json_add_string "" "/etc/icwmpd/update.sh"
json_close_array
json_close_array
json_add_int "" "2000"
json_close_array
procd_close_trigger
}

View File

@@ -1,18 +1,18 @@
# Copy defaults by the factory to the cwmp UCI user section.
# Get Manufacturer OUI.
oui=$(uci -q get cwmp.cpe.manufacturer_oui)
if [ -z "${oui}" ]; then
oui=$(db -q get device.deviceinfo.ManufacturerOUI)
fi
# Get factory base MAC.
baseMac=$(db -q get hw.board.basemac)
# Erase colon and space characters.
baseMac=${baseMac//:/}
baseMac=${baseMac// /}
# Caseing and fixed length string.
mac=$(printf "%12.12X" $((0x$baseMac)))
oui=$(echo "${oui}" | tr 'a-f' 'A-F')
# Get system serial number.
serial=$(db -q get hw.board.serial_number)
serial=$(uci -q get cwmp.cpe.serial_number)
if [ -z "${serial}" ]; then
serial=$(db -q get device.deviceinfo.SerialNumber)
fi
# Get userid values
acs_userid=$(uci -q get cwmp.acs.userid)
@@ -21,12 +21,12 @@ cpe_userid=$(uci -q get cwmp.cpe.userid)
# Only set if they are empty
if [ -z "$acs_userid" ]
then
uci -q set cwmp.acs.userid="${mac:0:6}-${serial}"
uci -q set cwmp.acs.userid="${oui}-${serial}"
fi
if [ -z "$cpe_userid" ]
then
uci -q set cwmp.cpe.userid="${mac:0:6}-${serial}"
uci -q set cwmp.cpe.userid="${oui}-${serial}"
fi
# No need for commit here, it is done by uci_apply_defaults().

View File

@@ -1,54 +0,0 @@
#!/bin/sh
. /lib/functions.sh
set_cwmp_reqopts() {
### Ask for DHCP Option 43 only if CWMP is enabled ###
local wan=$(uci -q get cwmp.cpe.default_wan_interface)
local dhcp_discovery=$(uci -q get cwmp.acs.dhcp_discovery)
local discovery=0
case $dhcp_discovery in
enable|1) discovery=1 ;;
esac
local newreqopts=
local baseopts=
local reqopts="$(uci -q get network.$wan.reqopts)"
local proto="$(uci -q get network.$wan.proto)"
local tropts="43"
local oldreqopts="$reqopts"
local ropt iopt
for ropt in $reqopts; do
case $ropt in
43) ;;
*) baseopts="$baseopts $ropt" ;;
esac
done
ropt=""
reqopts="$baseopts $tropts"
for ropt in $reqopts; do
case $ropt in
43) [ $discovery -eq 1 ] && newreqopts="$newreqopts $ropt" ;;
*) newreqopts="$newreqopts $ropt" ;;
esac
done
if [ "$proto" == "dhcp" ]; then
newreqopts="$(echo $newreqopts | tr ' ' '\n' | sort -n | tr '\n' ' ' | sed 's/^[ \t]*//;s/[ \t]*$//')"
oldreqopts="$(echo $oldreqopts | tr ' ' '\n' | sort -n | tr '\n' ' ' | sed 's/^[ \t]*//;s/[ \t]*$//')"
[ "$newreqopts" == "$oldreqopts" ] && return
uci -q set network.$wan.reqopts="$newreqopts"
uci commit network
fi
}
regenerate_ssl_link(){
local cert_dir="/etc/ssl/certs"
local all_file=$(ls $cert_dir/*.pem)
for cfile in $all_file
do
ln -s $cfile $cert_dir/$(openssl x509 -hash -noout -in $cfile).0
done
}
set_cwmp_reqopts
regenerate_ssl_link

View File

@@ -0,0 +1,18 @@
#!/bin/sh
. /lib/functions.sh
regenerate_ssl_link(){
[ ! -d "/etc/ssl/certs" ] && return 0;
[ ! -f "/etc/ssl/certs/*.pem" ] && return 0;
local cert_dir="/etc/ssl/certs"
local all_file=$(ls $cert_dir/*.pem)
for cfile in $all_file
do
ln -s $cfile $cert_dir/$(openssl x509 -hash -noout -in $cfile).0
done
}
regenerate_ssl_link

View File

@@ -1 +1 @@
/etc/icwmpd/.icwmpd_backup_session.xml
/var/run/icwmpd/icwmpd_backup_session.xml

View File

@@ -6,5 +6,9 @@ config IEEE1905_EXTENSION_ALLOWED
bool "Allow plugins to extend 1905 CMDUs and/or TLVs"
default y
config IEEE1905_PLATFORM_HAS_WIFI
bool "Platform has WiFi"
default y if PACKAGE_libwifi
endmenu
endif

View File

@@ -0,0 +1,14 @@
if (PACKAGE_map-plugin)
menu "Configurations"
config MULTIAP_DYNAMIC_CNTLR_SYNC_CONFIG
bool "Sync configuration between dynamic controllers in the network"
default n
config MULTIAP_FUZZ_1905_CMDUS
bool "Include support to fuzz 1905 CMDUs for testing purpose"
default n
endmenu
endif

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ieee1905
PKG_VERSION:=3.3.7
PKG_VERSION:=4.6.19
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=3fc90a1597bd06360e62fd70f4f7301a2499e267
PKG_SOURCE_VERSION:=7267a76fafa264792415a1cdc697a9e47934a1e6
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/ieee1905.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
@@ -37,26 +37,30 @@ endef
define Package/libieee1905
$(call Package/ieee1905/Default,$(1))
TITLE+= (library for CMDU and TLV handling)
DEPENDS= +libubox +libuci +libubus +libeasy +libnl-genl +libwifi \
+libjson-c +libblobmsg-json
DEPENDS= +libubox +libuci +libubus +libeasy +libnl-genl \
+libjson-c +libblobmsg-json +libopenssl
endef
define Package/ieee1905
$(call Package/ieee1905/Default,$(1))
TITLE+= ieee1905d (daemon implementing 1905.1 and provides cli)
DEPENDS= +libubox +libuci +libubus +libeasy +libnl-genl +libwifi \
+libjson-c +libblobmsg-json +libwifi +ubus +libpthread \
+libnl-genl +libieee1905
DEPENDS= +libubox +libuci +libubus +libeasy +libnl-genl \
+libjson-c +libblobmsg-json +ubus +libpthread \
+libieee1905 +IEEE1905_PLATFORM_HAS_WIFI:libwifi
endef
define Package/map-plugin
$(call Package/ieee1905/Default,$(1))
TITLE:=Multi-AP (Easymesh) plugin
DEPENDS= +libubox +libuci +libubus +libeasy +libnl-genl +libwifi \
DEPENDS= +libubox +libuci +libubus +libeasy +libnl-genl \
+libjson-c +libblobmsg-json +ieee1905 +libieee1905
endef
define Package/map-plugin/config
source "$(SOURCE)/Config.map-plugin.in"
endef
define Package/ieee1905/description
This package provides IEEE Std 1905.1 stack.
endef
@@ -68,8 +72,18 @@ endef
TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include \
-I$(STAGING_DIR)/usr/include/libnl3 \
-I$(STAGING_DIR)/usr/include/openssl \
-D_GNU_SOURCE
ifeq ($(CONFIG_IEEE1905_PLATFORM_HAS_WIFI),y)
TARGET_CFLAGS += -DHAS_WIFI
endif
ifeq ($(CONFIG_MULTIAP_DYNAMIC_CNTLR_SYNC_CONFIG),y)
TARGET_CFLAGS += -DDYNAMIC_CNTLR_SYNC_CONFIG
endif
MAKE_PATH:=src
@@ -100,6 +114,7 @@ define Build/InstallDev/map-plugin
$(INSTALL_DIR) $(1)/usr/lib/ieee1905
$(CP) $(PKG_BUILD_DIR)/src/extensions/map/map2.h $(1)/usr/include/map2.h
$(CP) $(PKG_BUILD_DIR)/src/extensions/map/map_module.h $(1)/usr/include/map_module.h
$(CP) $(PKG_BUILD_DIR)/src/extensions/map/cntlrsync.h $(1)/usr/include/cntlrsync.h
$(CP) $(PKG_BUILD_DIR)/src/extensions/map/map.so $(1)/usr/lib/ieee1905/map.so
$(CP) $(PKG_BUILD_DIR)/src/extensions/map/libmaputil.so $(1)/usr/lib/libmaputil.so
endef
@@ -110,6 +125,7 @@ define Build/InstallDev/libieee1905
$(INSTALL_DIR) $(1)/usr/include
$(INSTALL_DIR) $(1)/usr/lib/ieee1905
$(CP) $(PKG_BUILD_DIR)/src/cmdu.h $(1)/usr/include/
$(CP) $(PKG_BUILD_DIR)/src/cmdu_ackq.h $(1)/usr/include/
$(CP) $(PKG_BUILD_DIR)/src/1905_tlvs.h $(1)/usr/include/
$(CP) $(PKG_BUILD_DIR)/src/i1905_wsc.h $(1)/usr/include/
$(CP) $(PKG_BUILD_DIR)/src/bufutil.h $(1)/usr/include/
@@ -123,6 +139,11 @@ define Build/InstallDev
$(call Build/InstallDev/map-plugin,$(1),$(2))
endef
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
rsync -r --exclude=.* ~/git/ieee1905/ $(PKG_BUILD_DIR)/
endef
endif
$(eval $(call BuildPackage,ieee1905))
$(eval $(call BuildPackage,libieee1905))

View File

@@ -5,7 +5,82 @@ STOP=21
USE_PROCD=1
IS_CFG_VALID=1
validate_ieee1905_section() {
uci_validate_section ieee1905 ieee1905 "ieee1905" \
'enabled:bool:true' \
'macaddress:or("auto",macaddr)' \
'registrar:string' \
'extension:bool:false' \
'extmodule:list(string)' \
[ "$?" -ne 0 ] && {
logger -s -t "ieee1905" "Validation of ieee1905 section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_ali_section() {
local section="$1"
uci_validate_section ieee1905 $section "${1}" \
'ifname:string' \
'type:or("bridge",string)'
[ "$?" -ne 0 ] && {
logger -s -t "ieee1905" "Validation of al-iface section $section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_ap_section() {
local section="$1"
uci_validate_section ieee1905 $section "${1}" \
'band:or("2", "5", "60")' \
'ssid:string' \
'encryption:or("psk2", "sae-mixed", "sae", string)' \
'key:string' \
'uuid:string' \
'manufacturer:string' \
'model_name:string' \
'device_name:string' \
'model_number:string' \
'serial_number:string' \
'device_type:string' \
'os_version:uinteger'
[ "$?" -ne 0 ] && {
logger -s -t "ieee1905" "Validation of ap section $section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_ieee1905_config() {
IS_CFG_VALID=1
validate_ieee1905_section &&
config_foreach validate_ali_section "al-iface" &&
config_foreach validate_ap_section ap
[ "$IS_CFG_VALID" -ne 1 ] && {
logger -s -t "ieee1905" "Validation of ieee1905 UCI file failed"
return 1
}
return 0
}
start_service() {
config_load "ieee1905"
validate_ieee1905_config || return 1;
procd_open_instance
procd_set_param command "/usr/sbin/ieee1905d"
procd_set_param respawn

View File

@@ -1,4 +1,3 @@
CONFIG_BUILD_NLS=y
CONFIG_BUSYBOX_CUSTOM=y
CONFIG_CCACHE=y
CONFIG_DEBUG=y
@@ -18,7 +17,6 @@ CONFIG_PACKAGE_ddns-scripts=y
CONFIG_PACKAGE_ds-lite=y
CONFIG_PACKAGE_ethtool=y
CONFIG_PACKAGE_getopt=y
CONFIG_PACKAGE_glib2=y
CONFIG_PACKAGE_gre=y
CONFIG_PACKAGE_icwmp=y
CONFIG_PACKAGE_ieee1905=y
@@ -26,6 +24,7 @@ CONFIG_PACKAGE_map-topology=y
CONFIG_PACKAGE_mosquitto-client-ssl=y
CONFIG_PACKAGE_mosquitto-ssl=y
CONFIG_PACKAGE_wfadatad=y
CONFIG_PACKAGE_wfadatad-collector=y
CONFIG_PACKAGE_imonitor=m
CONFIG_PACKAGE_inbd=y
CONFIG_PACKAGE_ip-full=y
@@ -189,8 +188,6 @@ CONFIG_LIBCURL_CRYPTO_AUTH=y
CONFIG_LIBCURL_OPENSSL=y
CONFIG_OPENVPN_openssl_ENABLE_IPROUTE2=y
# CONFIG_SIGNED_PACKAGES is not set
CONFIG_KERNEL_DEVTMPFS=y
CONFIG_KERNEL_DEVTMPFS_MOUNT=y
# CONFIG_BUSYBOX_CONFIG_IP is not set
CONFIG_LOCALMIRROR="https://download.iopsys.eu/iopsys/mirror/"
@@ -219,3 +216,7 @@ CONFIG_TARGET_ROOTFS_TARGZ=y
# Disable it. Most SoCs nowadays has HW random generators anyway.
# CONFIG_PACKAGE_urandom-seed is not set
# CONFIG_PACKAGE_urngd is not set
# We use OpenSSL, no need to ship multiple TLS libraries
CONFIG_PACKAGE_libustream-openssl=y
# CONFIG_PACKAGE_libustream-wolfssl is not set

View File

@@ -5,7 +5,6 @@ function genconfig {
export IMPORT=1
export SRCTREEOVERR=0
export FILEDIR="files/"
export THEMEDIR="tmp/juci-themes"
CURRENT_CONFIG_FILE=".current_config_file"
export CONFIGPATH="package/feeds/iopsys/iop"
CUSTPATH="customerconfigs"
@@ -14,12 +13,9 @@ function genconfig {
export DEVELOPER=0
target="bogus"
target_config_path=""
bcm27xx="target/linux/iopsys-bcm27xx"
brcm63xx_arm="target/linux/iopsys-brcm63xx-arm"
ramips="target/linux/iopsys-ramips"
mediatek="target/linux/iopsys-mediatek"
econet="target/linux/iopsys-econet"
intel_mips="target/linux/intel_mips"
x86="target/linux/iopsys-x86"
armvirt="target/linux/iopsys-armvirt"
@@ -115,21 +111,15 @@ function genconfig {
iopsys_brcm63xx_arm=$(cd $brcm63xx_arm; ./genconfig)
[ -e $ramips/genconfig ] &&
iopsys_ramips=$(cd $ramips; ./genconfig)
[ -e $mediatek/genconfig ] &&
iopsys_mediatek=$(cd $mediatek; ./genconfig)
[ -e $econet/genconfig ] &&
iopsys_econet=$(cd $econet; ./genconfig)
[ -e $intel_mips/genconfig ] &&
iopsys_intel_mips=$(cd $intel_mips; ./genconfig)
[ -e $x86/genconfig ] &&
iopsys_x86=$(cd $x86; ./genconfig)
[ -e $armvirt/genconfig ] &&
iopsys_armvirt=$(cd $armvirt; ./genconfig)
[ -e $bcm27xx/genconfig ] &&
iopsys_bcm27xx=$(cd $bcm27xx; ./genconfig)
if [ "$profile" == "LIST" ]; then
for list in iopsys_brcm63xx_arm iopsys_ramips iopsys_mediatek iopsys_econet iopsys_intel_mips iopsys_x86 iopsys_armvirt iopsys_bcm27xx; do
for list in iopsys_brcm63xx_arm iopsys_ramips iopsys_econet iopsys_x86 iopsys_armvirt; do
echo "$list based boards:"
for b in ${!list}; do
echo -e "\t$b"
@@ -154,14 +144,6 @@ function genconfig {
fi
done
for p in $iopsys_mediatek; do
if [ $p == $profile ]; then
target="iopsys_mediatek"
target_config_path="$mediatek/config"
return
fi
done
for p in $iopsys_econet; do
if [ $p == $profile ]; then
target="iopsys_econet"
@@ -170,14 +152,6 @@ function genconfig {
fi
done
for p in $iopsys_intel_mips; do
if [ $p == $profile ]; then
target="intel_mips"
target_config_path="$intel_mips/config"
return
fi
done
for p in $iopsys_x86; do
if [ $p == $profile ]; then
target="iopsys_x86"
@@ -193,15 +167,6 @@ function genconfig {
return
fi
done
for p in $iopsys_bcm27xx; do
if [ $p == $profile ]; then
target="iopsys_bcm27xx"
target_config_path="$bcm27xx/config"
return
fi
done
}
git remote -v | grep -qE '(git@|ssh://)' && {
@@ -238,7 +203,7 @@ function genconfig {
local ALL="$1"
local CUSTOMER="$2"
if [ "$CUSTOMER" -a -d "$CUSTCONF/$CUSTOMER" ]; then
local boards="$(ls -1 "$CUSTCONF/$CUSTOMER" | grep -v common | grep -v juci-theme)"
local boards="$(ls -1 "$CUSTCONF/$CUSTOMER" | grep -v common)"
if [ "$boards" ]; then
echo "$CUSTOMER has following boards:"
for board in $boards; do
@@ -255,7 +220,7 @@ function genconfig {
if [ "$customers" -a "$ALL" == 1 ]; then
for customer in $customers; do
echo $customer
local boards="$(ls -1 $CUSTCONF/$customer | grep -v common | grep -v juci-theme)"
local boards="$(ls -1 $CUSTCONF/$customer | grep -v common)"
if [ "$boards" ]; then
for board in $boards; do
echo -e "\t$board"
@@ -309,13 +274,6 @@ function genconfig {
v "rm -rf $FILEDIR*"
rm -rf $FILEDIR*
fi
if [ ! -d "$THEMEDIR" ]; then
mkdir -p $THEMEDIR
elif [ -d "$THEMEDIR" -a $CLEAN -eq 1 ]; then
v "rm -rf $THEMEDIR/*"
rm -rf $THEMEDIR/*
fi
}
create_and_copy_files()
@@ -360,32 +318,16 @@ function genconfig {
echo "" >> .config
fi
#special handling for intel_mips/iopsys_ramips which use TARGET_DEVICES
if [ "$target" = "intel_mips" ]; then
subtarget="xrx500"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
device=$(echo $BOARDTYPE | tr a-z A-Z)
echo "CONFIG_TARGET_DEVICE_${target}_${subtarget}_DEVICE_${device}=y" >> .config
elif [ "$target" = "iopsys_ramips" ]; then
# Special handling for targets which use TARGET_DEVICES
if [ "$target" = "iopsys_ramips" ]; then
subtarget="mt7621"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
echo "CONFIG_TARGET_DEVICE_${target}_${subtarget}_DEVICE_${BOARDTYPE}=y" >> .config
elif [ "$target" = "iopsys_mediatek" ]; then
subtarget="mt7622"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}_DEVICE_${BOARDTYPE}=y" >> .config
elif [ "$target" = "iopsys_econet" ]; then
subtarget="en7562"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
elif [ "$target" = "iopsys_bcm27xx" ]; then
subtarget="iopsys_bcm2711"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
echo "CONFIG_TARGET_DEVICE_${target}_${subtarget}_DEVICE_${BOARDTYPE}=y" >> .config
else
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${BOARDTYPE}=y" >> .config
@@ -404,11 +346,6 @@ function genconfig {
v "cp -ar $CUSTCONF/$CUSTOMER/$BOARDTYPE/fs/* $FILEDIR"
cp -ar $CUSTCONF/$CUSTOMER/$BOARDTYPE/fs/* $FILEDIR
fi
if [ -d "$CUSTCONF/$CUSTOMER/juci-theme" ]; then
customer="$(echo $CUSTOMER | tr 'A-Z' 'a-z')"
v "cp -ar $CUSTCONF/$CUSTOMER/juci-theme $THEMEDIR/juci-theme-$customer"
cp -ar $CUSTCONF/$CUSTOMER/juci-theme $THEMEDIR/juci-theme-$customer
fi
if [ -e "$CUSTCONF/$CUSTOMER/common/common.diff" ]; then
v "Apply $CUSTCONF/$CUSTOMER/common/common.diff"
cat $CUSTCONF/$CUSTOMER/common/common.diff >> .config

View File

@@ -12,12 +12,9 @@ function genconfig_min {
export DEVELOPER=0
target="bogus"
target_config_path=""
bcm27xx="target/linux/iopsys-bcm27xx"
brcm63xx_arm="target/linux/iopsys-brcm63xx-arm"
ramips="target/linux/iopsys-ramips"
mediatek="target/linux/iopsys-mediatek"
econet="target/linux/iopsys-econet"
intel_mips="target/linux/intel_mips"
x86="target/linux/iopsys-x86"
armvirt="target/linux/iopsys-armvirt"
@@ -113,21 +110,15 @@ function genconfig_min {
iopsys_brcm63xx_arm=$(cd $brcm63xx_arm; ./genconfig)
[ -e $ramips/genconfig ] &&
iopsys_ramips=$(cd $ramips; ./genconfig)
[ -e $mediatek/genconfig ] &&
iopsys_mediatek=$(cd $mediatek; ./genconfig)
[ -e $econet/genconfig ] &&
iopsys_econet=$(cd $econet; ./genconfig)
[ -e $intel_mips/genconfig ] &&
iopsys_intel_mips=$(cd $intel_mips; ./genconfig)
[ -e $x86/genconfig ] &&
iopsys_x86=$(cd $x86; ./genconfig)
[ -e $armvirt/genconfig ] &&
iopsys_armvirt=$(cd $armvirt; ./genconfig)
[ -e $bcm27xx/genconfig ] &&
iopsys_bcm27xx=$(cd $bcm27xx; ./genconfig)
if [ "$profile" == "LIST" ]; then
for list in iopsys_brcm63xx_arm iopsys_ramips iopsys_mediatek iopsys_econet iopsys_intel_mips iopsys_x86 iopsys_armvirt iopsys_bcm27xx; do
for list in iopsys_brcm63xx_arm iopsys_ramips iopsys_econet iopsys_x86 iopsys_armvirt; do
echo "$list based boards:"
for b in ${!list}; do
echo -e "\t$b"
@@ -152,14 +143,6 @@ function genconfig_min {
fi
done
for p in $iopsys_mediatek; do
if [ $p == $profile ]; then
target="iopsys_mediatek"
target_config_path="$mediatek/config"
return
fi
done
for p in $iopsys_econet; do
if [ $p == $profile ]; then
target="iopsys_econet"
@@ -168,14 +151,6 @@ function genconfig_min {
fi
done
for p in $iopsys_intel_mips; do
if [ $p == $profile ]; then
target="intel_mips"
target_config_path="$intel_mips/config"
return
fi
done
for p in $iopsys_x86; do
if [ $p == $profile ]; then
target="iopsys_x86"
@@ -191,15 +166,6 @@ function genconfig_min {
return
fi
done
for p in $iopsys_bcm27xx; do
if [ $p == $profile ]; then
target="iopsys_bcm27xx"
target_config_path="$bcm27xx/config"
return
fi
done
}
git remote -v | grep -qE '(git@|ssh://)' && {
@@ -343,34 +309,16 @@ function genconfig_min {
echo "" >> .config
fi
#special handling for intel_mips/iopsys_ramips which use TARGET_DEVICES
if [ "$target" = "intel_mips" ]; then
subtarget="xrx500"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
device=$(echo $BOARDTYPE | tr a-z A-Z)
echo "CONFIG_TARGET_DEVICE_${target}_${subtarget}_DEVICE_${device}=y" >> .config
elif [ "$target" = "iopsys_ramips" ]; then
# Special handling for targets which use TARGET_DEVICES
if [ "$target" = "iopsys_ramips" ]; then
subtarget="mt7621"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
echo "CONFIG_TARGET_DEVICE_${target}_${subtarget}_DEVICE_${BOARDTYPE}=y" >> .config
elif [ "$target" = "iopsys_mediatek" ]; then
subtarget="mt7622"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}_DEVICE_${BOARDTYPE}=y" >> .config
elif [ "$target" = "iopsys_econet" ]; then
subtarget="en7562"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
elif [ "$target" = "iopsys_bcm27xx" ]; then
subtarget="iopsys_bcm2711"
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${subtarget}=y" >> .config
echo "CONFIG_TARGET_MULTI_PROFILE=y" >> .config
echo "CONFIG_TARGET_PER_DEVICE_ROOTFS=y" >> .config
echo "CONFIG_TARGET_DEVICE_${target}_${subtarget}_DEVICE_${BOARDTYPE}=y" >> .config
else
echo "CONFIG_TARGET_${target}=y" >> .config
echo "CONFIG_TARGET_${target}_${BOARDTYPE}=y" >> .config

View File

@@ -1,122 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=juci
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/juci.git
PKG_SOURCE_VERSION:=70b66bfc7f0e25e77b6920c3d44e5b05f4bfcf95
PKG_VERSION:=2020-05-27
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
PKG_RELEASE=$(PKG_VERSION)-$(PKG_SOURCE_VERSION)
PKG_LICENSE:=GPLv2
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
define Package/juci
$(Package/juci/default)
SECTION:=juci
CATEGORY:=JUCI
MENU=1
TITLE:=JUCI Core Package (select this to select default plugins)
DEPENDS:=+libubox +libubus +owsd +rpcd +rpcd-mod-file +questd
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/src/
ln -s $(PKG_BUILD_DIR) $(1)/usr/src/juci
endef
define Build/Compile
$(call Build/Compile/Default,THEME_PATH="$(TOPDIR)/tmp/juci-themes/")
endef
define Package/juci/description
JUCI Javascript UCI Web interface.
endef
define Package/juci/install
$(INSTALL_DIR) $(1)/
$(CP) $(PKG_BUILD_DIR)/bin/juci/* $(1)/
$(CP) ./files/* $(1)/
endef
define Package/juci/postinst
#!/bin/sh
juci-update
exit 0
endef
$(eval $(call BuildPackage,juci))
####### Extensions / Themes and Plugins
define RegisterAddonInner
define Package/$(2)
SECTION:=juci
CATEGORY:=JUCI
TITLE:=default
SUBMENU:=$(1)
TITLE:=$(if $(3),$(3),JUCI $(2) plugin)
DEPENDS:=$(4)
endef
define Package/$(2)/install
$(INSTALL_DIR) $$(1)/
$(CP) $(PKG_BUILD_DIR)/bin/$(2)/* $$(1)/
endef
endef
define RegisterAddon
$(eval $(call RegisterAddonInner,$(1),$(2),$(3),$(4),$(5)))
$(eval $(call BuildPackage,$(2)))
endef
$(eval $(call RegisterAddon,Plugins,juci-catv, CATV Module,@(PACKAGE_catv)))
$(eval $(call RegisterAddon,Plugins,juci-cgroups, CGroups Module,@(PACKAGE_icgroupd)))
$(eval $(call RegisterAddon,Plugins,juci-ddns, DDNS Configuration,@(PACKAGE_ddns-scripts)))
$(eval $(call RegisterAddon,Plugins,juci-diagnostics, Simple Diagnostics,@(PACKAGE_busybox)))
$(eval $(call RegisterAddon,Plugins,juci-ndt, NDT Speed Test client,@(PACKAGE_ndt)))
$(eval $(call RegisterAddon,Plugins,juci-dnsmasq-dhcp, DHCP/DNSMasq Configuration,@(PACKAGE_dnsmasq||PACKAGE_dnsmasq-full)))
$(eval $(call RegisterAddon,Plugins,juci-dropbear, Dropbear Configuration,@(PACKAGE_dropbear)))
$(eval $(call RegisterAddon,Plugins,juci-easyqos, Easy QoS module,@(PACKAGE_easy-qos)))
$(eval $(call RegisterAddon,Plugins,juci-event, Event Module,@(PACKAGE_owsd)))
$(eval $(call RegisterAddon,Plugins,juci-firewall-fw3, Firewall Configuration,@(PACKAGE_firewall)))
$(eval $(call RegisterAddon,Plugins,juci-icwmp, TR-069 Module,@(PACKAGE_icwmp)))
$(eval $(call RegisterAddon,Plugins,juci-config-backup, Config Backup Module))
$(eval $(call RegisterAddon,Plugins,juci-qos, QoS module,@(PACKAGE_qos-scripts)))
$(eval $(call RegisterAddon,Plugins,juci-voice-client, Asterisk Voice Client Module,@(PACKAGE_asterisk)))
$(eval $(call RegisterAddon,Plugins,juci-minidlna, MiniDLNA Configuration,@(PACKAGE_minidlna)))
$(eval $(call RegisterAddon,Plugins,juci-mcproxy, Multicast Proxy Configuration,@(PACKAGE_mcproxy)))
$(eval $(call RegisterAddon,Plugins,juci-mod-status, Status Reporting Module,@(PACKAGE_questd)))
$(eval $(call RegisterAddon,Plugins,juci-mod-system, System Administration Module))
$(eval $(call RegisterAddon,Plugins,juci-mwan3, mwan3 Configuration,@(PACKAGE_mwan3)))
$(eval $(call RegisterAddon,Plugins,juci-natalie-dect, DECT Module,@(PACKAGE_dectmngr2)))
$(eval $(call RegisterAddon,Plugins,juci-netmode, Netmode Module,@(PACKAGE_netmode)))
$(eval $(call RegisterAddon,Plugins,juci-network-device, Network Device Configuration,@(PACKAGE_netifd)))
$(eval $(call RegisterAddon,Plugins,juci-network-dsl, DSL Module))
$(eval $(call RegisterAddon,Plugins,juci-network-netifd, Network Module,@(PACKAGE_netifd)))
$(eval $(call RegisterAddon,Plugins,juci-network-port, Ethernet Port Configuration,@(PACKAGE_port-management)))
$(eval $(call RegisterAddon,Plugins,juci-openvpn, OpenVPN configuration,@(PACKAGE_openvpn)))
$(eval $(call RegisterAddon,Plugins,juci-owsd, OWSD configuration,@(PACKAGE_owsd)))
$(eval $(call RegisterAddon,Plugins,juci-printer, p910nd Printer Server Configuration,@(PACKAGE_p910nd)))
#$(eval $(call RegisterAddon,Plugins,juci-realtime-graphs, Realtime Graphs))
$(eval $(call RegisterAddon,Plugins,juci-samba, Samba Configuration,@(PACKAGE_samba3)))
$(eval $(call RegisterAddon,Plugins,juci-sfp, SFP Configuration,@(PACKAGE_peripheral_manager)))
$(eval $(call RegisterAddon,Plugins,juci-snmpd, SNMP Module,@(PACKAGE_snmpd)))
$(eval $(call RegisterAddon,Plugins,juci-sysupgrade, Sysupgrade Firmware Upgrade,@(PACKAGE_rpcd-mod-rpcsys)))
$(eval $(call RegisterAddon,Plugins,juci-uhttpd, uHTTPD Configuration,@(PACKAGE_uhttpd)))
$(eval $(call RegisterAddon,Plugins,juci-upnp, UPnP Configuration Module,@(PACKAGE_miniupnpd)))
#$(eval $(call RegisterAddon,Plugins,juci-usb, USB Module))
$(eval $(call RegisterAddon,Plugins,juci-wireless, Wireless Management Module))
$(eval $(call RegisterAddon,Plugins,juci-wifilife, WiFi Life Module,@(PACKAGE_wifilife)))
$(eval $(call RegisterAddon,Themes,juci-theme-iopsys))
####### dynamically publish themes as packages #######
$(foreach th,$(wildcard $(TOPDIR)/tmp/juci-themes/*),$(eval $(call RegisterAddon,Themes,$(notdir $(th)))))

View File

@@ -1,66 +0,0 @@
config juci 'juci'
option homepage 'overview'
option theme 'juci-theme-iopsys'
option favicon 'favicon.ico'
config login 'login'
option showusername '1'
option defaultuser 'user'
config localization 'localization'
option default_language 'en'
list languages 'en'
config wiki 'wiki'
option visible '0'
option version 'v4.2.x'
config widget
list name 'overviewWidget11WAN'
list require 'ubus:network.interface'
config widget
list name 'overviewWidget10Network'
list require 'ubus:network.interface'
list require 'ubus:router.network->hosts'
config widget
list name 'overviewWidget00WiFi'
list require 'ubus:wifi'
list require 'ubus:wifi.wps'
config menu
option path 'overview'
option page 'overview'
config menu
option path 'system'
option page 'system'
option redirect 'first'
config menu
option path 'status'
option page 'status'
option redirect 'first'
config menu
option path 'status/system'
option page 'status-system'
list require 'ubus:router.system->info'
config menu
option path 'status/network'
option page 'status-network'
list require 'ubus:network.interface'
config menu
option path 'status/dsl'
option page 'network-dsl-status'
list require 'ubus:dsl->stats'
list require 'ubus:dsl->status'
config menu
option path 'system/upgrade'
option page 'settings-upgrade'
list expose 'admin'

View File

@@ -1,41 +0,0 @@
#!/bin/sh /etc/rc.common
. /lib/functions.sh
START=94
STOP=06
USE_PROCD=1
NAME=juci
start_service() {
mkdir -p /tmp/juci
touch /www/index.html.gz
chmod 755 /www/cgi-bin/luci
# this will simply update index.html to include any files that are for some reason not included
# a good way to make sure all plugins are properly included at each boot
config_load juci
local theme
config_get theme juci theme
if [ "$theme" ]
then
if [ -f /www/themes/theme.js.gz ]
then
rm -f /www/themes/theme.js.gz
fi
if [ -f /www/themes/*$theme.js.gz ]
then
ln -s /www/themes/*$theme.js.gz /www/themes/theme.js.gz
fi
fi
juci-update
}
stop() {
service_stop /sbin/juci
}
service_triggers()
{
procd_add_reload_trigger juci
}

View File

@@ -1,49 +0,0 @@
#!/bin/sh
. /lib/functions.sh
USER_SECTION=""
USER_EXISTS=0
find_user(){
local section="$1"
local user="$2"
config_get username $section username
if [ "$username" == "$user" ]; then
USER_SECTION="$section"
USER_EXISTS=1
fi
}
config_load rpcd
USER_EXISTS=0
config_foreach find_user login root
if [ $USER_EXISTS -eq 1 ]; then
uci delete rpcd.$USER_SECTION
fi
USER_EXISTS=0
config_foreach find_user login admin
if [ $USER_EXISTS -eq 0 ]; then
uci -q add rpcd login >/dev/null
uci -q set rpcd.@login[-1].username="admin"
uci -q set rpcd.@login[-1].password="\$p\$admin"
uci -q add_list rpcd.@login[-1].read="enduser"
uci -q add_list rpcd.@login[-1].read="administrator"
uci -q add_list rpcd.@login[-1].write="enduser"
uci -q add_list rpcd.@login[-1].write="administrator"
fi
USER_EXISTS=0
config_foreach find_user login user
if [ $USER_EXISTS -eq 0 ]; then
uci -q add rpcd login >/dev/null
uci -q set rpcd.@login[-1].username="user"
uci -q set rpcd.@login[-1].password="\$p\$user"
uci -q add_list rpcd.@login[-1].read="enduser"
uci -q add_list rpcd.@login[-1].write="enduser"
fi
uci commit rpcd

View File

@@ -1,21 +0,0 @@
{
"administrator": {
"description": "Administrator Access Rights",
"read": {
"ubus": {
"file": [
"write"
],
"rpc-sys": [
"upgrade_start",
"upgrade_test"
]
}
},
"write": {
"file": {
"/tmp/firmware.bin": ["write"]
}
}
}
}

View File

@@ -1,217 +0,0 @@
{
"enduser": {
"description": "End User Access Rights",
"read": {
"ubus": {
"dect": [
"state",
"handset",
"status",
"call"
],
"dsl": [
"status",
"stats"
],
"network.device": [
"status"
],
"network.interface*": [
"status",
"dump",
"up",
"down"
],
"router.network": [
"clients",
"hosts",
"dump"
],
"router.system": [
"info",
"memory",
"filesystem",
"process",
"processes"
],
"session": [
"access",
"list",
"destroy",
"login"
],
"system": [
"info",
"board",
"reboot"
],
"testnet": [
"status"
],
"uci": [
"*"
],
"voice.asterisk": [
"status",
"call_log",
"platform",
"supported_countries"
],
"wifi": [
"status"
],
"wifi.ap.*": [
"status",
"stats",
"assoclist",
"stations"
],
"wifi.radio.*": [
"status",
"stats",
"scan",
"scanresults",
"autochannel"
],
"wifi.wps": [
"start",
"stop",
"status",
"showpin"
]
},
"uci": [
"dhcp",
"firewall",
"juci",
"network",
"voice_client",
"wireless"
],
"owsd": [
"client",
"wifi.radio",
"wifi.sta",
"wifi.wps"
]
},
"write": {
"uci": [
"dhcp",
"firewall",
"network",
"wireless"
],
"uci_granular": {
"dhcp": [
{
"match": {
".type": "dhcp"
},
"option": [
"*"
]
},
{
"match": {
".type": "host"
},
"option": [
"*"
]
}
],
"firewall": [
{
"match": {
".type": "settings",
".name": "settings"
},
"option": [
"disabled"
]
},
{
"match": {
".type": "zone"
},
"option": [
"masq",
"name",
"network"
]
},
{
"match": {
".type": "redirect"
},
"option": [
"*"
]
},
{
"match": {
".type": "rule"
},
"option": [
"*"
]
},
{
"match": {
".type": "dmz"
},
"option": [
"enabled",
"host",
"ip6addr"
]
}
],
"network": [
{
"match": {
".type": "interface"
},
"option": [
"*"
]
}
],
"wireless": [
{
"match": {
".type": "wifi-status"
},
"option": [
"wps"
]
},
{
"match": {
".type": "wifi-iface",
"mode": "ap"
},
"option": [
"*"
]
},
{
"match": {
".type": "wifi-device"
},
"option": [
"channel"
]
}
]
},
"owsd": [
"client",
"wifi.radio",
"wifi.sta",
"wifi.wps"
]
}
}
}

10
map-agent/Config.in Normal file
View File

@@ -0,0 +1,10 @@
if (PACKAGE_map-agent)
menu "Configurations"
config AGENT_SYNC_DYNAMIC_CNTLR_CONFIG
bool "Support Dynamic Controller configuration sync"
default y if MULTIAP_DYNAMIC_CNTLR_SYNC_CONFIG
endmenu
endif

View File

@@ -5,20 +5,21 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-agent
PKG_VERSION:=5.3.1
PKG_VERSION:=7.1.10
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=aa4048fdca6b42f78ffe40aec63a48732af696bf
PKG_SOURCE_VERSION:=8d2fa1af3b0cbdb65f791b490e72c5925cccaa05
PKG_MAINTAINER:=Anjan Chanda <anjan.chanda@iopsys.eu>
PKG_LICENSE:=PROPRIETARY IOPSYS
PKG_LICENSE_FILES:=LICENSE
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git@dev.iopsys.eu:iopsys/map-agent.git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/map-agent
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
PKG_BUILD_DEPENDS:=map-plugin
endif
include $(INCLUDE_DIR)/package.mk
@@ -30,12 +31,26 @@ define Package/map-agent
+map-plugin
endef
define Package/dynbhd
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Dynamic Backhaul Daemon
DEPENDS:=+libwifi +libuci +libubox +ubus +libeasy +libieee1905 +ieee1905 \
+map-plugin +map-agent
endef
define Package/map-agent/description
This package implements EasyMesh R2 compliant WiFi Agent.
endef
define Package/dynbhd/description
Dyanmic LAN/WAN port detection and loop avoidance.
endef
define Package/map-agent/config
#source "$(SOURCE)/Config.in"
source "$(SOURCE)/Config.in"
endef
TARGET_CFLAGS += \
@@ -43,6 +58,10 @@ TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include/libnl3 \
-D_GNU_SOURCE
ifeq ($(CONFIG_AGENT_SYNC_DYNAMIC_CNTLR_CONFIG),y)
TARGET_CFLAGS += -DAGENT_SYNC_DYNAMIC_CNTLR_CONFIG
endif
MAKE_PATH:=src
define Package/map-agent/install
@@ -53,4 +72,21 @@ define Package/map-agent/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mapagent $(1)/usr/sbin/
endef
define Package/dynbhd/install
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_DIR) $(1)/lib/wifi/dynbhd
$(INSTALL_DIR) $(1)/etc/hotplug.d/ethernet
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/dynbh/dynbhd $(1)/usr/sbin/dynbhd
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/dynbh/api $(1)/lib/wifi/dynbhd/api
# $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/dynbh/map-dynamic-backhaul $(1)/etc/hotplug.d/ethernet/map-dynamic-backhaul
endef
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
rsync -r --exclude=.* ~/git/map-agent/ $(PKG_BUILD_DIR)/
endef
endif
$(eval $(call BuildPackage,map-agent))
$(eval $(call BuildPackage,dynbhd))

View File

@@ -4,7 +4,7 @@ config agent 'agent'
option profile '2'
option al_bridge 'br-lan'
#config fh-iface
#config ap
# option ifname 'wl0'
# option steer 'rssi bssload'
# list exclude '00:11:22:33:44:55'
@@ -17,15 +17,17 @@ config agent 'agent'
# option steer_legacy_retry_secs '3600'
# option assoc_ctrl_secs '30'
# option band '2'
# option type 'fronthaul'
#config fh-iface
#config ap
# option ifname 'wl1'
# option steer 'rssi bssload'
# list exclude '00:11:22:33:44:55'
# list exclude_btm '00:aa:bb:cc:dd:ee'
# option band '5'
# option type 'fronthaul'
#config bk-iface
#config bsta
# option ifname 'apclii0'
# option enabled '1'
# option onboarded '0'

View File

@@ -0,0 +1,49 @@
#!/bin/sh
wan=$(db -q get hw.board.ethernetWanPort)
MAPFILE="/tmp/multiap.backhaul"
[ -z "$wan" ] && exit 1 # no configuration
[ "$PORT" != "$wan" ] && exit 0
remove_from_bridge() {
config_get ifname "$section" ifname
ubus call network.interface.$bridge remove_device '{"name":"$ifname"}'
}
update_bstas() {
local section="$1"
local action="$2"
local ifname onboarded
config_get ifname "$section" ifname
config_get_bool enabled "$section" enabled 0
if [ "$action" = "down" ]; then
wpa_cli -i "$ifname" disconnect > /dev/null 2>&1
wpa_cli -i "$ifname" disable_network 0 > /dev/null 2>&1
# wpa_cli -i "$ifname" save_config > /dev/null 2>&1
elif [ "$action" = "up" ]; then
[ "$enabled" -eq 0 ] && return
wpa_cli -i "$ifname" reconnect > /dev/null 2>&1
wpa_cli -i "$ifname" enable_network 0 > /dev/null 2>&1
# wpa_cli -i "$ifname" save_config > /dev/null 2>&1
fi
}
if [ "$LINK" = "up" ]; then
#touch "$MAPFILE"
config_load "mapagent"
bridge=$(uci get mapagent.agent.al_bridge | cut -d '-' -f2)
config_foreach remove_from_bridge bsta $bridge
config_foreach update_bstas bsta down
/lib/wifi/multiap set_uplink "eth" "$PORT"
else
rm -f "$MAPFILE"
config_load "mapagent"
config_foreach update_bstas bsta up
fi

View File

@@ -1,29 +0,0 @@
#!/bin/sh
wan=$(db -q get hw.board.ethernetWanPort)
[ -z "$wan" ] && exit 1 # no configuration
[ "$PORT" != "$wan" ] && exit 0
update_bstas() {
local section="$1"
local action="$2"
local ifname onboarded
config_get ifname "$section" ifname
config_get_bool onboarded "$section" onboarded 0
[ "$onboarded" -eq 0 ] && return
wpa_cli -i "$ifname" "$action" > /dev/null 2>&1
}
if [ "$LINK" = "up" ]; then
touch /tmp/map.agent.bsta_global_disable
config_load "mapagent"
config_foreach update_bstas bk-iface disconnect
else
rm -f /tmp/map.agent.bsta_global_disable
config_load "mapagent"
config_foreach update_bstas bk-iface reconnect
fi

View File

@@ -5,8 +5,200 @@ STOP=20
USE_PROCD=1
IS_CFG_VALID=1
MAP_DEV="map_dev"
MAP_IF="map"
create_map() {
ip link add lei type veth peer name lei_map 2>/dev/null
ip link add link lei name lei_lan type vlan id 1 2>/dev/null
uci -q set network.${MAP_DEV}=device
uci -q set network.${MAP_DEV}.name=br-map
uci -q set network.${MAP_DEV}.type=bridge
uci -q show network.${MAP_DEV}.ports | grep -q lei_map || {
uci -q add_list network.${MAP_DEV}.ports='lei_map'
}
uci -q set network.${MAP_IF}=interface
uci -q set network.${MAP_IF}.device=br-map
uci -q set network.${MAP_IF}.is_lan=1
uci -q show network.br_lan.ports | grep -q lei_lan || {
uci -q add_list network.br_lan.ports="lei_lan"
}
uci -q set mapagent.agent.al_bridge=br-map
uci -q commit
ubus call network reload
ubus -t 5 wait_for network.interface.map
brctl addif br-map lei_map 2>/dev/null
brctl addif br-lan lei_lan 2>/dev/null
ip link set lei up 2>/dev/null
ip link set lei_map up 2>/dev/null
ip link set lei_lan up 2>/dev/null
}
remove_map() {
ip link delete ${MAP_VETH} &>/dev/null
uci -q delete network.${MAP_DEV}
uci -q delete network.${MAP_IF}
uci -q set mapagent.agent.al_bridge=br-lan
uci -q commit
ubus call network reload
}
start_dynbhd_service() {
rm -f /tmp/map.agent.bsta_global_disable
procd_open_instance
procd_set_param command "/usr/sbin/dynbhd"
procd_set_param respawn
# procd_set_param stdout 1
# procd_set_param stderr 1
procd_close_instance
}
validate_agent_section() {
uci_validate_section mapagent agent "agent" \
'enabled:bool:true' \
'debug:range(0,16)' \
'profile:range(1,2):2' \
'brcm_setup:bool:false' \
'controller_macaddr:macaddr' \
'al_bridge:string' \
'netdev:string' \
'vlan_segregation:bool:false' \
'resend_num:uinteger:0' \
'dyn_cntlr_sync:bool:true'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of agent section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_cs_section() {
local section="$1"
uci_validate_section mapagent $section "${section}" \
'local:bool:false' \
'id:string' \
'probe_int:range(0,1000):20' \
'retry_int:range(0,255):3' \
'autostart:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of controller_select section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_ap_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'ifname:string' \
'device:string' \
'band:or("2", "5")' \
'enabled:bool:true' \
'onboarded:bool:false' \
'ssid:string' \
'key:string' \
'encryption:string' \
'disallow_bsta_p1:bool:false' \
'disallow_bsta_p2:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of ap section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_radio_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'device:string' \
'band:or("2", "5")' \
'configured:bool:false' \
'onboarded:bool:false' \
'dedicated_backhaul:bool:false' \
'steer_policy:range(0,255)' \
'util_threshold:range(0,255)' \
'rcpi_threshold:range(0,255)' \
'report_rcpi_threshold:range(0,255)' \
'include_sta_stats:bool:false' \
'include_sta_metric:bool:false' \
'rcpi_hysteresis_margin:range(0,255)' \
'report_util_threshold:range(0,255)'
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of radio section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_policy_section() {
local section="$1"
uci_validate_section mapagent $section "${1}" \
'report_interval:range(0,255)' \
'pvid:uinteger' \
'report_interval:range(0,255)' \
'pcp_default:range(0,255)' \
'report_scan:bool' \
'report_sta_assocfails:bool' \
'report_sta_assocfails_rate:uinteger' \
'steer_exclude:list(macaddr)' \
'steer_exclude_btm:list(macaddr)' \
[ "$?" -ne 0 ] && {
logger -s -t "mapagent" "Validation of policy section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_agent_config() {
IS_CFG_VALID=1
validate_agent_section &&
config_foreach validate_cs_section controller_select &&
config_foreach validate_ap_section ap &&
config_foreach validate_radio_section radio &&
config_foreach validate_policy_section policy
[ "$IS_CFG_VALID" -ne 1 ] && {
logger -s -t "mapagent" "Validation of mapagent UCI file failed"
return 1
}
return 0
}
start_service() {
[ -f /usr/sbin/dynbhd ] && start_dynbhd_service
config_load "mapagent"
validate_agent_config || return 1;
ubus -t 5 wait_for wifi
@@ -16,6 +208,10 @@ start_service() {
config_get_bool enabled agent enabled 1
[ "$enabled" -eq 0 ] && return 1
local ts
config_get_bool ts agent vlan_segregation 0
[ "$ts" -eq 1 ] && create_map #|| remove_map
procd_open_instance
procd_set_param command "/usr/sbin/mapagent" "-d"
procd_set_param respawn
@@ -24,9 +220,13 @@ start_service() {
procd_close_instance
}
#stop_service() {
# remove_map
#}
service_triggers()
{
procd_add_reload_trigger "ieee1905"
procd_add_reload_trigger "mapagent"
}
reload_service() {

View File

@@ -7,8 +7,14 @@
# write_credentials - write bBSS credentials to fBSS
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
. /lib/wifi/traffic_separation
MAPFILE="/tmp/multiap.backhaul"
diff=0
onbrd_bssid=0
onbrd_band=0
usage() {
cat <<EOF
@@ -23,12 +29,42 @@ EOF
exit 1
}
type_to_multi_ap () {
type="$1"
if [ "$type" = "backhaul" ]; then
echo "1"
return
elif [ "$type" = "fronthaul" ]; then
echo "2"
return
elif [ "$type" = "combined" ]; then
echo "3"
return
fi
echo "0"
}
get_type_by_section() {
section="$1"
config_get type $section type "0"
echo "$(type_to_multi_ap $type)"
}
brcm_sync_credentials() {
bands=""
json_init
mapagent_process_fh() {
local section=$1
local dev=$2
multi_ap=$(get_type_by_section $section)
[ "$multi_ap" == "0" ] && return
config_get device $section device
[ "$dev" != "$device" ] && return
@@ -41,10 +77,21 @@ brcm_sync_credentials() {
section=$(uci add ieee1905 ap)
[ "$section" == "" ] && return
uci set ieee1905.${section}.band=$band
uci set ieee1905.${section}.ssid=$ssid
uci set ieee1905.${section}.encryption=$encryption
uci set ieee1905.${section}.key=$key
uci -q set ieee1905.${section}.band=$band
uci -q set ieee1905.${section}.ssid="$ssid"
uci -q set ieee1905.${section}.encryption=$encryption
uci -q set ieee1905.${section}.key="$key"
json_select "$band" > /dev/null
if [ "$?" = "0" ]; then
json_get_keys keys
for key in ${keys};
do
json_get_var val "$key"
uci -q set ieee1905.${section}.$key="$val"
done
json_select ..
fi
}
mapagent_process_radio() {
@@ -62,12 +109,43 @@ brcm_sync_credentials() {
fi
done
config_foreach mapagent_process_fh fh-iface $device
config_foreach mapagent_process_fh ap $device
bands="$bands $band"
}
ieee1905_del_ap() {
append_value() {
local section=$1
local key=$2
shift
shift
while [ "$key" != "" ]; do
val=$(uci -q get ieee1905.$section.$key)
[ "$val" = "" ] && {
key=$1
shift
continue
}
json_add_string "$key" ${val}
key=$1
shift
done
}
local section=$1
local band
config_get band $section band
json_select "$band" > /dev/null
rc=$?
[ "$rc" != "0" ] && json_add_object "$band"
append_value $section "manufacturer" "model_name" "device_name" "model_number" "serial_number" "device_type" "os_version"
if [ "$rc" != "0" ]; then
json_close_object
else
json_select ..
fi
uci -q delete ieee1905.${section}
}
@@ -76,12 +154,12 @@ brcm_sync_credentials() {
config_foreach ieee1905_del_ap ap
config_load mapagent
config_foreach mapagent_process_radio wifi-radio
config_foreach mapagent_process_radio radio
uci commit ieee1905
json_cleanup
}
brcm_write_credentials() {
config_load mapagent
@@ -89,8 +167,8 @@ brcm_write_credentials() {
write_wireless() {
local section=$1
local map_ifname=$2
local bk_ssid=$3
local bk_key=$4
local bk_ssid="$3"
local bk_key="$4"
config_get ifname $section ifname
@@ -98,24 +176,26 @@ brcm_write_credentials() {
[ "$ifname" != "$map_ifname" ] && return
#echo applying bk_ssid = $bk_ssid bk_key = $bk_key
#echo applying bk_ssid = "$bk_ssid" bk_key = "$bk_key"
uci -q set wireless.${section}.multi_ap_backhaul_ssid="$bk_ssid"
uci -q set wireless.${section}.multi_ap_backhaul_key="$bk_key"
}
config_load wireless
config_foreach write_wireless wifi-iface $1 $2 $3
config_foreach write_wireless wifi-iface "$1" "$2" "$3"
}
mapagent_find_fbss() {
local section=$1
local dev=$2
local bk_ssid=$3
local bk_key=$4
local bk_ssid="$3"
local bk_key="$4"
multi_ap=$(get_type_by_section $section)
[ "$multi_ap" == "0" ] && return
config_get device $section device
config_get multi_ap $section multi_ap "0"
#echo found dev=$dev device=$device map=$multi_ap
@@ -124,18 +204,20 @@ brcm_write_credentials() {
config_get ifname $section ifname
#echo applying bk_ssid = $bk_ssid bk_key = $bk_key
#echo applying bk_ssid = "$bk_ssid" bk_key = "$bk_key"
# subshell in hopes to maintain mapagent config loaded
$(mapagent_apply_wireless $ifname $bk_ssid $bk_key)
echo $(mapagent_apply_wireless $ifname "$bk_ssid" "$bk_key") 2> /dev/null
}
mapagent_find_bbss() {
local section=$1
local dev=$2
multi_ap=$(get_type_by_section $section)
[ "$multi_ap" == "0" ] && return
config_get device $section device
config_get multi_ap $section multi_ap "0"
config_get enabled $section enabled "1"
#echo found dev=$dev device=$device map=$multi_ap
@@ -147,9 +229,9 @@ brcm_write_credentials() {
config_get ssid $1 ssid
config_get key $1 key
#echo found ssid=$ssid key=$key
#echo found ssid="$ssid" key="$key"
config_foreach mapagent_find_fbss fh-iface $dev $ssid $key
config_foreach mapagent_find_fbss ap $dev "$ssid" "$key"
}
mapagent_process_radio() {
@@ -159,11 +241,11 @@ brcm_write_credentials() {
#echo found dev=$dev
config_foreach mapagent_find_bbss fh-iface $device
config_foreach mapagent_find_bbss ap $device
}
config_foreach mapagent_process_radio wifi-radio
config_foreach mapagent_process_radio radio
uci commit wireless
}
@@ -198,6 +280,7 @@ write_bsta_config() {
#echo diff = $diff > /dev/console
config_load mapagent
mapagent_apply_wl_bsta() {
@@ -210,7 +293,7 @@ write_bsta_config() {
[ "$bsta" == "$ifname" ] || return
#echo setting diff = $diff > /dev/console
uci set wireless.${section}.bssid=$bssid
uci -q set wireless.${section}.bssid=$bssid
echo 1
}
config_load wireless
@@ -223,6 +306,7 @@ write_bsta_config() {
local section=$1
local bsta=$2
config_get ifname $section ifname
#echo bsta = $bsta > /dev/console
@@ -230,15 +314,43 @@ write_bsta_config() {
#echo found ifname=$ifname > /dev/console
config_get bssid $section bssid
config_get band $section band
ret=$(mapagent_apply_wl_bsta $ifname $bssid)
[ "$ret" == "1" ] && diff=1
[ "$ret" == "1" ] && {
diff=1
onbrd_bssid=$bssid
onbrd_band=$band
}
}
mapagent_apply_bssid_same_band() {
apply_config() {
local section=$1
local bsta=$2
config_foreach mapagent_process_bk bk-iface $ifname
config_get ifname $section ifname
[ "$bsta" == "$ifname" ] || return
uci -q set wireless.${section}.bssid=$bssid
}
config_get band $1 band
config_get onboarded $1 onboarded "0"
[ "$onbrd_band" != "$band" -o "$onboarded" = "1" ] && return
config_get ifname $1 ifname
config_load wireless
config_foreach apply_config wifi-iface $ifname $onbrd_bssid
uci commit wireless
}
config_foreach mapagent_process_bk bsta $ifname
#echo result diff = $diff > /dev/console
[ "$diff" == "1" ] && {
config_foreach mapagent_apply_bssid_same_band bsta
ubus call uci commit '{"config":"wireless"}'
#echo reloading wireless > /dev/console
}
@@ -275,6 +387,9 @@ brcm_teardown_iface() {
local section=$1
local iface=$2
multi_ap=$(get_type_by_section $section)
[ "$multi_ap" == "0" ] && return
config_get ifname $section ifname
[ "$iface" != "$ifname" ] && return
@@ -289,13 +404,12 @@ brcm_teardown_iface() {
}
config_foreach mapagent_teardown_bss fh-iface $iface
config_foreach mapagent_teardown_bss ap $iface
uci commit wireless
uci commit mapagent
}
brcm_bsta_to_wireless() {
config_load mapagent
@@ -315,12 +429,12 @@ brcm_bsta_to_wireless() {
local sec=""
local prio="-1"
config_foreach mapagent_process_bk bk-iface
config_foreach mapagent_process_bk bsta
echo $sec
}
mapagent_enable_best() {
echo 1=$1 best=$best > /dev/console
#echo 1=$1 best=$best > /dev/console
if [ "$1" = "$best" ]; then
uci -q set mapagent.$1.enabled='1'
else
@@ -333,10 +447,11 @@ brcm_bsta_to_wireless() {
apply_config() {
local section=$1
local bsta=$2
local ssid=$3
local key=$4
local ssid="$3"
local key="$4"
local encryption=$5
local enabled=$6
local bssid=$7
local disabled="0"
config_get ifname $section ifname
@@ -345,10 +460,17 @@ brcm_bsta_to_wireless() {
[ "$bsta" == "$ifname" ] || return
uci set wireless.${section}.ssid=$ssid
uci set wireless.${section}.key=$key
uci set wireless.${section}.encryption=$encryption
uci set wireless.${section}.disabled=$disabled
uci -q set wireless.${section}.ssid="$ssid"
uci -q set wireless.${section}.key="$key"
uci -q set wireless.${section}.encryption=$encryption
uci -q set wireless.${section}.bssid="$bssid"
#uci -q set wireless.${section}.disabled=$disabled
[ "$disabled" != "1" ] && return
wpa_cli -i "$bsta" disconnect > /dev/null 2>&1
wpa_cli -i "$bsta" disable_network 0 > /dev/null 2>&1
wpa_cli -i "$bsta" save_config > /dev/null 2>&1
echo 1
}
@@ -359,8 +481,7 @@ brcm_bsta_to_wireless() {
}
mapagent_find_other_creds() {
echo "trying to find other creds for $2" > /dev/console
#echo "trying to find other creds for $2" > /dev/console
config_get band $1 band
config_get onboarded $1 onboarded "0"
@@ -370,8 +491,9 @@ brcm_bsta_to_wireless() {
config_get key $1 key
config_get encryption $1 encryption
config_get enabled $1 enabled "0"
config_get bssid $1 bssid
echo "$(mapagent_apply_wl_bsta $2 $ssid $key $encryption $4)"
echo $(mapagent_apply_wl_bsta $2 "$ssid" "$key" $encryption $4 "$bssid")
}
config_get band $1 band
@@ -380,35 +502,281 @@ brcm_bsta_to_wireless() {
config_get enabled $1 enabled "0"
if [ "$onboarded" = "0" ]; then
config_foreach mapagent_find_other_creds bk-iface $ifname $band $enabled
config_foreach mapagent_find_other_creds bsta $ifname $band $enabled
else
config_get ssid $1 ssid
config_get key $1 key
config_get encryption $1 encryption
config_get bssid $1 bssid
echo "$(mapagent_apply_wl_bsta $ifname $ssid $key $encryption $enabled)"
echo $(mapagent_apply_wl_bsta $ifname "$ssid" "$key" $encryption $enabled "$bssid")
fi
}
best=$(mapagent_find_lowest_prio_onboarded)
[ -z "$best" ] && return
band=$1
sec=""
prio=""
config_foreach mapagent_enable_best bk-iface $best
uci commit mapagent
# best=$(mapagent_find_lowest_prio_onboarded)
#
# [ -z "$best" ] && return
#
# band=$1
# sec=""
# prio=""
#
# config_foreach mapagent_enable_best bsta $best
# uci commit mapagent
config_load mapagent
diff=$(config_foreach mapagent_bsta_to_wireless bk-iface)
diff=$(config_foreach mapagent_bsta_to_wireless bsta)
[ "$diff" != "" ] && {
# [ "$diff" != "" ] && {
ubus call uci commit '{"config":"wireless"}'
# }
}
sync_mapcontroller_from_wireless() {
ubus -t 5 wait_for wifi
[ "$?" != "0" ] && return
[ ! -f "/etc/config/wireless" ] && return
status=$(ubus -S call wifi status)
device_to_band() {
local ifname=$1
json_load "$status"
json_select "radios"
json_get_keys keys
for key in $keys; do
json_select $key
json_get_var name name
if [ "$name" != "$ifname" ]; then
json_select ..
continue
fi
json_get_var band band
if [ "$band" == "5GHz" ]; then
echo "5"
elif [ "$band" == "2.4GHz" ]; then
echo "2"
fi
break
done
json_cleanup
}
wireless_process_iface() {
local section=$1
local type="ap"
local enabled="1"
config_get multi_ap $section multi_ap 0
[ "$multi_ap" != "1" ] && [ "$multi_ap" != "2" ] && return
config_get mode $section mode "ap"
[ "$mode" != "ap" ] && return
config_get device $section device
band=$(device_to_band $device)
[ "$band" == "" ] && return
config_get ssid $section ssid
config_get key $section key
config_get encryption $section encryption
config_get start_disabled $section start_disabled "0"
config_get network $section network
cntlr_section=$(uci add mapcontroller ${type})
uci -q set mapcontroller.${cntlr_section}.ssid="$ssid"
uci -q set mapcontroller.${cntlr_section}.key="$key"
uci -q set mapcontroller.${cntlr_section}.encryption="$encryption"
uci -q set mapcontroller.${cntlr_section}.band="$band"
uci -q set mapcontroller.${cntlr_section}.vid="1"
uci -q set mapcontroller.${cntlr_section}.network="$network"
[ "$multi_ap" == "1" ] && map_type="backhaul" || map_type="fronthaul"
uci -q set mapcontroller.${cntlr_section}.type="$map_type"
[ "$start_disabled" == "1" ] && enabled="0"
uci -q set mapcontroller.${cntlr_section}.enabled="$enabled"
}
mapcontroller_teardown() {
local section=$1
uci delete mapcontroller.$1
}
config_load mapcontroller
config_foreach mapcontroller_teardown ap
config_load wireless
config_foreach wireless_process_iface wifi-iface
uci commit mapcontroller
}
bsta_scan_on_enabled() {
config_load mapagent
mapagent_enable_bk() {
config_get ifname $1 ifname
config_get enabled $1 enabled
echo ifname $ifname enabled $enabled
[ "$enabled" = "0" ] && return
wpa_cli -i "$ifname" enable_network 0 > /dev/null 2>&1
wpa_cli -i "$ifname" reconnect > /dev/null 2>&1
wpa_cli -i "$ifname" save_config > /dev/null 2>&1
}
config_foreach mapagent_enable_bk bsta
}
bsta_enable_all() {
mapagent_enable_bk() {
config_get ifname $1 ifname "2"
uci -q set mapagent.$1.enabled="1"
}
config_load mapagent
config_foreach mapagent_enable_bk bsta
uci commit mapagent
bsta_scan_on_enabled
}
bsta_disable_lower_priority() {
config_load mapagent
mapagent_get_priority() {
config_get ifname $1 ifname
[ "$ifname" != "$2" ] && return
config_get priority $1 priority "2"
echo "$priority"
}
mapagent_disable_lower_bk() {
mapagent_apply_wl_bsta() {
apply_config() {
local section="$1"
local bsta="$2"
local enabled="$3"
config_get ifname $section ifname
[ "$bsta" == "$ifname" ] || return
[ "$enabled" != "0" ] && return
wpa_cli -i "$ifname" disconnect > /dev/null 2>&1
wpa_cli -i "$ifname" disable_network 0 > /dev/null 2>&1
wpa_cli -i "$ifname" save_config > /dev/null 2>&1
}
local ifname="$1"
local enabled="$2"
[ "$enabled" != "0" ] && return
config_load wireless
config_foreach apply_config wifi-iface $ifname $enabled
}
local enabled="1"
config_get ifname $1 ifname
config_get priority $1 priority
[ "$ifname" != "$2" -a "$priority" -gt "$3" ] && enabled="0"
uci -q set mapagent.$1.enabled="$enabled"
echo $(mapagent_apply_wl_bsta $ifname $enabled) > /dev/null
}
local bsta=$1
prio=$(config_foreach mapagent_get_priority bsta $bsta)
#echo bsta $bsta has prio $prio > /dev/console
config_foreach mapagent_disable_lower_bk bsta $bsta $prio
uci commit mapagent
# ubus call uci commit '{"config":"wireless"}'
}
bsta_use_link() {
config_load mapagent
mapagent_disable_bk() {
local bsta="$2"
config_get ifname $1 ifname
config_get enabled $1 enabled
[ "$bsta" = "$ifname" ] && return
wpa_cli -i "$ifname" disconnect > /dev/null 2>&1
wpa_cli -i "$ifname" disable_network 0 > /dev/null 2>&1
wpa_cli -i "$ifname" save_config > /dev/null 2>&1
}
local bsta=$1
config_foreach mapagent_disable_bk bsta $bsta
}
bsta_swap_to_link() {
bsta_disable_lower_priority $1
bsta_use_link $1
wpa_cli -i "$1" enable_network 0 > /dev/null
wpa_cli -i "$1" reconnect > /dev/null
wpa_cli -i "$1" save_config > /dev/null
}
set_uplink_backhaul_info() {
local ul_1905id=$1
local ul_mac=$2
json_load "$(cat $MAPFILE)"
json_add_string "backhaul_device_id" "$ul_1905id"
json_add_string "backhaul_macddr" "$ul_mac"
json_dump > "$MAPFILE"
json_cleanup
}
set_uplink() {
local type=$1
local ifname=$2
local hwaddr
hwaddr="$(ifconfig $ifname | grep -i hwaddr | awk '{print $5}' | awk '{print tolower($0)}')"
json_init
json_add_string "type" "$type"
json_add_string "ifname" "$ifname"
json_add_string "macaddr" "$hwaddr"
json_dump > "$MAPFILE"
json_cleanup
}
unset_uplink() {
rm "$MAPFILE" > /dev/null 2>&1
}
func=$1
shift
@@ -423,6 +791,16 @@ case "$func" in
write_bsta_config) write_bsta_config $@;;
teardown_iface) brcm_teardown_iface $@;;
bsta_to_wireless) brcm_bsta_to_wireless $@;;
sync_mapcontroller_from_wireless) sync_mapcontroller_from_wireless $@;;
ts) ts_sub $@;;
bsta_enable_all) bsta_enable_all $@;;
bsta_disable_lower_priority) bsta_disable_lower_priority $@;;
bsta_scan_on_enabled) bsta_scan_on_enabled $@;;
bsta_use_link) bsta_use_link $@;;
bsta_swap_to_link) bsta_swap_to_link $@;;
set_uplink) set_uplink $@;;
set_uplink_backhaul_info) set_uplink_backhaul_info $@;;
unset_uplink) unset_uplink $@;;
--help|help) usage;;
*) usage; exit 1;;
esac

View File

@@ -0,0 +1,511 @@
#!/bin/sh
. /lib/functions.sh
### Traffic Separation ###
dbg() {
logger -t traffic_separation $@
}
ts_sub() {
ts_usage() {
cat <<EOF
Usage: $0 [create|delete|populate|primary|reload]
Traffic Separation related functions.
create fh <iface> <vid> - create vlan device and rules for wifi fronthaul
create bh <iface> <vid> <profile> - create vlan device and rules for wifi backhaul
create eth <iface> <vid> <pbits> - create vlan device and rules for logical ethernet interface
delete <iface> - delete vlan device
populate eth <iface> <vid> - add secondary network rules for logical ethernet interface
primary get <iface> - read primary VID for interface from driver (from Association Response frame IE)
reload - reload network with new configuration
EOF
exit 1
}
_get_bridge() {
local bridge=$(ip link show $1 | grep -o "master [^\s]*" | cut -d ' ' -f 2)
echo $bridge
}
set_wireless_bridge() {
config_load wireless
_set_network() {
local sec=$1
local iface=$2
local bridge=$3
config_get ifname $sec ifname
[ "$iface" != "$ifname" ] && continue
config_get mode $sec mode
config_get multi_ap $sec multi_ap "0"
[ "$mode" = "sta" -a "$multi_ap" = "1" ] && continue
config_get network $sec network
local new_network=${bridge##br-}
if [ "$new_network" != "$network" ] ; then
uci -q set wireless.${sec}.network=${new_network}
uci commit wireless
fi
brctl addif $bridge $iface &> /dev/null
}
config_foreach _set_network wifi-iface ${1} ${2}
}
ts_create() {
_create_vlan_dev() {
iface=$1 # real iface
vid=$2 # Vlan ID
bridge=$3 # bridge iface should be connected
vlan_dev=$4
old_bridge="$(_get_bridge $iface)" # bridge iface is connected to
# remove interface from bridge if it is in one
[ -n "$old_bridge" ] && brctl delif $old_bridge $iface &> /dev/null
# (re)create vlan device
ip link show $vlan_dev && vlanctl --if-delete $vlan_dev
vlanctl --mcast --if-create-name $iface $vlan_dev --if $iface --set-if-mode-rg
vlanctl --if $iface --tx --tags 0 --default-miss-drop
vlanctl --if $iface --tx --tags 1 --default-miss-drop
vlanctl --if $iface --tx --tags 2 --default-miss-drop
vlanctl --if $iface --rx --tags 0 --default-miss-drop
vlanctl --if $iface --rx --tags 1 --default-miss-drop
vlanctl --if $iface --rx --tags 2 --default-miss-drop
# bring the vlan device up and add back to bridge if it was in one
brctl addif $bridge $vlan_dev &> /dev/null
}
ts_create_fh() {
iface=$1 # fh iface
vid=$2 # SSID specific (secondary) or primary vid
bridge=$3
[ -n "$iface" ] && [ -n "$vid" ] && [ -n "$bridge" ] || {
cat <<EOF
Adding FH device requires IFACE, VID and bridge
EOF
exit 1
}
# create vlan device
#set_wireless_bridge $iface $bridge
vlan_dev=${iface}_vlan${vid}
ip link set $vlan_dev down
_create_vlan_dev $iface $vid $bridge $vlan_dev
# add rules
# vlanctl --if $iface --rx --tags 0 --filter-ethertype 0x886c --set-rxif $vlan_dev --rule-append # incoming brcm
# EAPOL frames
vlanctl --if $iface --rx --tags 0 --filter-ethertype 34958 --set-rxif $vlan_dev --rule-append
vlanctl --if $iface --rx --tags 1 --filter-ethertype 34958 --pop-tag --set-rxif $vlan_dev --rule-append
vlanctl --if $iface --tx --tags 0 --filter-txif $vlan_dev --filter-ethertype 34958 --rule-append
# 8021q vlan id TAG/UNTAG
vlanctl --if $iface --rx --tags 0 --set-rxif $vlan_dev --push-tag --set-vid $vid 0 --rule-append
vlanctl --if $iface --tx --tags 1 --filter-txif $vlan_dev --filter-vid $vid 0 --pop-tag --dscp2pbits 0 --rule-append
ip link set $iface up
ip link set $vlan_dev up
}
ts_create_bh() {
iface=$1 # bh iface
vid=$2 # primary vid
profile=$3 # agent profile (1 or 2)
bridge=$4 # bridge interface should be connected to
[ -n "$iface" ] && [ -n "$vid" ] && [ -n "$profile" ] || {
cat <<EOF
Adding BH device requires IFACE, VID and PROFILE (1 or 2).
EOF
exit 1
}
#[ -n "$bridge" ] && set_wireless_bridge $iface $bridge
old_vid=$(wl -i $1 map_8021q_settings)
old_vid=${old_vid##* }
old_profile=$(wl -i $1 map_profile | cut -d ' ' -f 3)
[ "$old_vid" = "$vid" -a "$old_profile" = "$profile" ] && return
wl vlan_mode 0 &> /dev/null # make sure this is OFF, else driver won't handle vlan
wl -i $iface down &> /dev/null
wl -i $iface map_profile $profile &> /dev/null # only has effect on profile 2
wl -i $iface map_8021q_settings $vid &> /dev/null # can only be set on bBSS (read-only on bSTA)
wl -i $iface up &> /dev/null
}
ts_create_lei() {
vid=$1 # primary vid
pbits=$2 # default pbits to apply
vlan_bridge=$3 # name of ts subsystem bridge
lan_bridge=$4 # name of node local bridge
[ -n "$vid" ] && [ -n "$pbits" ] && [ -n "$vlan_bridge" ] && [ -n "$lan_bridge" ] || {
cat <<EOF
Adding ETH device requires IFACE, VID, PBITS and name of vlan and lan bridges.
EOF
exit 1
}
ip link show lei &> /dev/null || {
ip link add link lei name lei_lan type vlan id 1 2>/dev/null
}
old_vid=$(ip -d link show lei_lan | sed -n 's/vlan.*id \([0-9][0-9]*\) .*/\1/p')
[ "$old_vid" != "$vid" ] && {
ip link del lei_lan
ip link add link lei name lei_lan type vlan id ${vid}
}
brctl addif ${lan_bridge} lei_lan &>/dev/null
brctl addif ${vlan_bridge} lei_map &>/dev/null
ip link set lei up
ip link set lei_map up
ip link set lei_lan up
}
_create_eth() {
iface=$1 # Multi-AP Logical Ethernet Interface
vid=$2 # primary vid
bridge=$3 # name of ts subsystem bridge
pbits=0
[ -n "$iface" ] && [ -n "$vid" ] && [ -n "$bridge" ] || {
cat <<EOF
Adding ETH device requires IFACE, VID, PBITS and name of vlan and lan bridges.
EOF
exit 1
}
dbg create $@
ip link set $iface down
vlan_dev=${iface}_vlan${vid}
ip link set $vlan_dev down
_create_vlan_dev $iface $vid $bridge $vlan_dev
vlanctl --if $iface --rx --tags 0 --set-rxif $vlan_dev --push-tag --set-vid $vid 0 --set-pbits $pbits 0 --rule-append
vlanctl --if $iface --tx --tags 1 --filter-vid $vid 0 --filter-txif $vlan_dev --pop-tag --rule-append
[ $# -le 3 ] && exit 0
shift 3
while [ -n "$1" ] ; do
vid=$1
vlanctl --if $iface --rx --tags 1 --filter-vid $vid 0 --set-rxif $vlan_dev --rule-append
vlanctl --if $iface --tx --tags 1 --filter-vid $vid 0 --filter-txif $vlan_dev --rule-append
shift
done
ip link set $iface up
ip link set $vlan_dev up
}
ts_create_eths() {
pvid=$1 # primary vid
bridge=$2 # name of ts subsystem bridge
shift 2
# TODO use ieee1905 bridge
for iface in $(uci get network.br_lan.ports) ; do
[ "$iface" = "lei_lan" ] && continue
_create_eth $iface $pvid $bridge $@
ubus call ieee1905 del_interface "{\"ifname\":\"$iface\"}"
done
}
ts_create_dhcp() {
local diff=""
_net_setup() {
local name=$1
local devname=$2
local vid=$3
[ -z "$(uci -q get network.${name})" ] && {
uci -q set network.${name}="interface"
uci -q set network.${name}.device="$devname"
uci -q set network.${name}.is_lan="1"
uci -q set network.${name}.proto="static"
# TODO vid > 255
local ip_addr="192.168.${vid}.1"
[ "${vid}" = "1" ] && ip_addr="192.168.${vid}.2"
uci -q set network.${name}.ipaddr="${ip_addr}"
uci -q set network.${name}.netmask="255.255.255.0"
diff="1"
}
[ "$diff" = "1" ] && uci -q commit network
}
_br_setup() {
local name=$1
local sinkname=$2
local vid=$3
[ -z "$(uci -q get network.${name}_dev)" ] && {
uci -q set network.${name}_dev="device"
uci -q set network.${name}_dev.name="br-${name}"
uci -q set network.${name}_dev.type="bridge"
uci -q set network.${name}_dev.bridge_empty="1"
uci -q add_list network.${name}_dev.ports="${sinkname}"
diff="1"
}
[ -z "$(uci -q get network.${name})" ] && {
uci -q set network.${name}="interface"
uci -q set network.${name}.device="br-${name}"
uci -q set network.${name}.is_lan="1"
uci -q set network.${name}.proto="static"
uci -q set network.${name}.ipaddr="192.168.${vid}.1"
uci -q set network.${name}.netmask="255.255.255.0"
diff="1"
}
[ "$diff" = "1" ] && uci -q commit network
}
_dhcp_setup() {
local name=$1
[ -n "$(uci -q get dhcp.${name})" ] && return
uci -q set dhcp.${name}=dhcp
uci -q set dhcp.${name}.interface="${name}"
uci -q set dhcp.${name}.start="100"
uci -q set dhcp.${name}.limit="150"
uci -q set dhcp.${name}.leasetime="1h"
uci -q set dhcp.${name}.dhcpv4="server"
uci -q set dhcp.${name}.dhcpv6="server"
uci -q set dhcp.${name}.ra="server"
uci -q set dhcp.${name}.ra_slaac="1"
uci -q add_list dhcp.${name}.ra_flags="managed-config"
uci -q add_list dhcp.${name}.ra_flags="other-config"
diff="1"
uci -q commit dhcp
}
_firewall_setup() {
local name=$1
local network=$2
local zone_exist=0
config_load firewall
_process_zone() {
local section=$1
local new_name=$2
local name
config_get name $section name
[ "$name" == "$new_name" ] && zone_exist=1
}
config_foreach _process_zone zone $name
[ "$zone_exist" != "0" ] && return
uci -q add firewall zone
uci -q set firewall.@zone[-1].name="$name"
uci -q add_list firewall.@zone[-1].network="$network"
uci -q set firewall.@zone[-1].input='ACCEPT'
uci -q set firewall.@zone[-1].output='ACCEPT'
uci -q set firewall.@zone[-1].forward='ACCEPT'
uci -q add firewall forwarding
uci -q set firewall.@forwarding[-1].src="$name"
uci -q set firewall.@forwarding[-1].dest="wan"
diff="1"
uci -q commit firewall
}
vid=$1 # primary vid
[ -n "$vid" ] || {
cat <<EOF
VID required to configure DHCP.
EOF
exit 1
}
ip link show sink${vid} || {
ip link add sink${vid} type veth peer name sink${vid}_vlan
ip link add link sink${vid} name sink${vid}_peer type vlan id ${vid}
}
ip link set sink${vid} up
ip link set sink${vid}_peer up
ip link set sink${vid}_vlan up
diff=""
_net_setup sink${vid} sink${vid}_peer ${vid}
_dhcp_setup sink${vid}
_firewall_setup lan${vid} sink${vid}
[ "$diff" = "1" ] && {
ubus call network reload
ubus -t 5 wait_for network.interface.sink${vid}
}
brctl addif br-map sink${vid}_vlan &> /dev/null
}
local type=$1
shift
case "$type" in
fh) ts_create_fh $@;;
bh) ts_create_bh $@;;
lei) ts_create_lei $@;;
eths) ts_create_eths $@;;
dhcp) ts_create_dhcp $@;;
--help|help) ts_usage;;
*) ts_usage; exit 1;;
esac
}
ts_delete() {
iface=$1
path=$(ls -d /sys/class/net/${iface}/upper_*)
[ -z "$path" ] && exit 0
vlan_dev=${path##*upper_}
bridge="$(_get_bridge $vlan_dev)"
[ -n "$bridge" ] && {
vlanctl --if-delete $vlan_dev # note: also removes rules and removes from bridge
brctl addif $bridge $iface &> /dev/null # needed to add again
}
}
ts_populate() {
local type=$1
shift
[ "$type" == "eth" ] || {
cat <<EOF
Populating ETH rules requires IFACE and VID.
EOF
exit 1
}
iface=$1 # Multi-AP Logical Ethernet Interface
vid=$2 # secondary vid
path=$(ls -d /sys/class/net/${iface}/upper_*)
[ -z "$path" ] && exit 1
vlan_dev=${path##*upper_}
# add rules
#vlanctl --if $iface --rx --tags 1 --filter-vid $vid 0 --set-rxif $vlan_dev --rule-append # note: retain secondary vids
#vlanctl --if $iface --tx --tags 1 --filter-vid $vid 0 --filter-txif $vlan_dev --rule-append # note: already default
}
ts_primary() {
local func=$1
shift
case "$func" in
get) vid=$(wl -i $1 map_8021q_settings); echo ${vid##* };;
*) ts_usage; exit 1;;
esac
}
ts_unicast() {
local mac=$1
local iface=$2
# TODO: improve?
res=$(ebtables -t broute -L | grep -i "$mac" | grep "$iface")
[ -n "$res" ] && return
ebtables -t broute -D BROUTING -d "$mac" -p 0x893a -j DROP
ebtables -t broute -I BROUTING -i "$iface" -d "$mac" -p 0x893a -j DROP
}
ts_multicast() {
local iface=$1
# TODO: improve?
res=$(ebtables -t broute -L | grep -i "1:80:C2:00:00:13" | grep "$iface")
[ -n "$res" ] && return
ebtables -t broute -D BROUTING -d 01:80:C2:00:00:13 -p 0x893a -j DROP
ebtables -t broute -D BROUTING -i "$iface" -d 01:80:C2:00:00:13 -p 0x893a -j DROP
ebtables -t broute -I BROUTING -i "$iface" -d 01:80:C2:00:00:13 -p 0x893a -j DROP
}
ts_reload() {
local dhcp_reload=$1
# workaround for missing backhaul wifi.ap.* ubus obj's:
# iterate in config and setup bh
config_load wireless
_setup_bh_iface() {
local sec=$1
local iface=$2
local bridge=$3
config_get ifname $sec ifname
config_get mode $sec mode
config_get multi_ap $sec multi_ap "0"
[ "$mode" = "ap" -a "$multi_ap" = "1" ] && {
ts_create bh $ifname 1 2 br-map
}
}
config_foreach _setup_bh_iface wifi-iface
[ -n "dhcp_reload" ] && /etc/init.d/dnsmasq reload
# another workaround for netif? removed
# sink devices for br-map bridge
for sink in $(ubus list network.interface.sink*) ; do
local sink_vlan=${sink/network.interface./}_vlan
brctl addif br-map $sink_vlan &> /dev/null
done
}
local func=$1
shift
case "$func" in
create) dbg "create $@"; ts_create $@;;
delete) dbg "delete $@"; ts_delete $@;;
populate) dbg "populate $@"; ts_populate $@;;
primary) dbg "primary $@"; ts_primary $@;;
unicast) dbg "unicast $@"; ts_unicast $@;;
multicast) dbg "multicast $@"; ts_multicast $@;;
reload) dbg "reload $@"; ts_reload $@;;
--help|help) ts_usage;;
*) ts_usage; exit 1;;
esac
}

10
map-controller/Config.in Normal file
View File

@@ -0,0 +1,10 @@
if (PACKAGE_map-controller)
menu "Configurations"
config CONTROLLER_SYNC_DYNAMIC_CNTLR_CONFIG
bool "Support Dynamic Controller configuration sync"
default y if MULTIAP_DYNAMIC_CNTLR_SYNC_CONFIG
endmenu
endif

View File

@@ -5,20 +5,20 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=map-controller
PKG_VERSION:=4.2.4
PKG_VERSION:=6.0.5
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=df83b5150688588921677cba96a303af0f204b12
PKG_SOURCE_VERSION:=3562b7f774e6dffda2e58ad2acb382fc439273fb
PKG_LICENSE:=PROPRIETARY IOPSYS
PKG_LICENSE_FILES:=LICENSE
LOCAL_DEV=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git@dev.iopsys.eu:iopsys/map-controller.git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/map-controller
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)_$(PKG_SOURCE_VERSION).tar.xz
PKG_MIRROR_HASH:=skip
PKG_BUILD_DEPENDS:=map-plugin
endif
include $(INCLUDE_DIR)/package.mk
@@ -34,7 +34,7 @@ define Package/map-controller/description
endef
define Package/map-controller/config
#source "$(SOURCE)/Config.in"
source "$(SOURCE)/Config.in"
endef
TARGET_CFLAGS += \
@@ -44,6 +44,10 @@ TARGET_CFLAGS += \
MAKE_PATH:=src
ifeq ($(CONFIG_CONTROLLER_SYNC_DYNAMIC_CNTLR_CONFIG),y)
TARGET_CFLAGS += -DCONTROLLER_SYNC_DYNAMIC_CNTLR_CONFIG
endif
define Package/map-controller/install
$(INSTALL_DIR) $(1)/etc
$(CP) ./files/* $(1)/
@@ -51,4 +55,10 @@ define Package/map-controller/install
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mapcontroller $(1)/usr/sbin/
endef
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
rsync -r --exclude=.* ~/git/map-controller/ $(PKG_BUILD_DIR)/
endef
endif
$(eval $(call BuildPackage,map-controller))

View File

@@ -5,6 +5,8 @@ STOP=20
USE_PROCD=1
IS_CFG_VALID=1
handle_controller_select() {
local section="$1"
@@ -12,10 +14,122 @@ handle_controller_select() {
return 1
}
validate_controller_section() {
uci_validate_section mapcontroller controller "controller" \
'enabled:bool:true' \
'registrar:string' \
'debug:range(0,16)' \
'resend_num:uinteger:0' \
'enable_sta_steer:bool:false' \
'enable_bsta_steer:bool:false' \
'use_bcn_metrics:bool:false' \
'use_usta_metrics:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapcontroller" "Validation of controller section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_ap_section() {
local section="$1"
uci_validate_section mapcontroller $section "${1}" \
'band:or("2", "5")' \
'ssid:string' \
'encryption:or("sae", "sae+aes", "psk2",
"psk2+aes", "sae-mixed", "sae-mixed+aes")' \
'key:string' \
'vid:range(1,65535):1' \
'type:or("backhaul", "fronthaul", "combined")' \
'disallow_bsta:list(range(0,255)):0' \
'enabled:bool:true'
[ "$?" -ne 0 ] && {
logger -s -t "mapcontroller" "Validation of ap section $section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_node_section() {
local section="$1"
uci_validate_section mapcontroller $section "${1}" \
'agent_id:macaddr' \
'backhaul_ul_macaddr:macaddr' \
'backhaul_dl_macaddr:macaddr' \
'backhaul_type:or("none")' \
'primary_vid:range(0,255):1' \
'primary_pcp:range(0,255):0' \
'report_sta_assocfails:bool:false' \
'report_sta_assocfails_rate:uinteger' \
'report_metric_periodic:range(0,255)' \
'report_scan:bool:false' \
'steer_exclude:list(macaddr)' \
'steer_exclude_btm:list(macaddr)' \
'steer_disallow:bool:false' \
'coordinated_cac:bool:false' \
'traffic_separation:bool:false' \
'sta_steer:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapcontroller" "Validation of node section $section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_radio_section() {
local section="$1"
uci_validate_section mapcontroller $section "${1}" \
'agent_id:macaddr' \
'macaddr:macaddr' \
'band:or("2", "5")' \
'steer_policy:range(0,2)' \
'util_threshold:range(0,255)' \
'rcpi_threshold:range(0,255)' \
'report_rcpi_threshold:range(0,255)' \
'report_util_threshold:range(0,255)' \
'report_rcpi_hysteresis_margin:range(0,255)' \
'include_sta_stats:bool:false' \
'include_sta_metric:bool:false'
[ "$?" -ne 0 ] && {
logger -s -t "mapcontroller" "Validation of radio section $section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_controller_config() {
IS_CFG_VALID=1
validate_controller_section &&
config_foreach validate_ap_section ap &&
config_foreach validate_node_section node &&
config_foreach validate_radio_section radio
[ "$IS_CFG_VALID" -ne 1 ] && {
logger -s -t "mapcontroller" "Validation of mapcontroller UCI file failed"
return 1
}
return 0
}
start_service() {
local enabled
config_load "mapcontroller"
validate_controller_config || return 1;
config_get_bool enabled controller enabled 1
[ "$enabled" -eq 0 ] && return
@@ -48,6 +162,8 @@ reload_service() {
config_get_bool enabled controller enabled 1
if [ "$enabled" -eq 0 ]; then
stop
# Start but without instance so reload trigger works.
start
return
fi

View File

@@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=map-topology
PKG_VERSION:=2.1.9
PKG_VERSION:=3.2.5
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_VERSION:=a00f747fafa5b029d24e2a571841f4cf92431bc7
PKG_SOURCE_VERSION:=ddf78cca217ebfa83733a532bdd2d17b6c3af54e
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/map-topology.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
@@ -30,7 +30,9 @@ define Package/map-topology
endef
TARGET_CFLAGS += \
-I$(STAGING_DIR)/usr/include
-I$(STAGING_DIR)/usr/include \
-I$(STAGING_DIR)/usr/include/libnl3 \
-D_GNU_SOURCE
define Package/map-topology/description
Constructs network topology and show it as json structure over UBUS

View File

@@ -5,7 +5,72 @@ STOP=21
USE_PROCD=1
IS_CFG_VALID=1
validate_topology_config() {
uci_validate_section topology topology "topology" \
'enabled:bool:true' \
'depth:range(0,16)' \
'interval:range(0,65535)' \
'maxlog:range(0,128)' \
[ "$?" -ne 0 ] && {
logger -s -t "topology" "Validation of topology UCI file failed"
return 1
}
return 0
}
validate_global_section() {
uci_validate_section hosts global "global" \
'ageing_timer:uinteger' \
'reboot_persistent:bool'
[ "$?" -ne 0 ] && {
logger -s -t "hosts" "Validation of global section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_host_section() {
local section="$1"
uci_validate_section hosts $section "${1}" \
'macaddr:macaddr' \
'interface_type:or("wifi","eth")' \
'active:bool' \
'active_last_change:string'
[ "$?" -ne 0 ] && {
logger -s -t "hosts" "Validation of host section $section failed"
IS_CFG_VALID=0
return 1
}
return 0
}
validate_hosts_config() {
IS_CFG_VALID=1
validate_global_section &&
config_foreach validate_host_section host
[ "$IS_CFG_VALID" -ne 1 ] && {
logger -s -t "topology" "Validation of hosts UCI file failed"
return 1
}
return 0
}
start_service() {
config_load "topology"
validate_topology_config || return 1;
config_load "hosts"
validate_hosts_config || return 1;
procd_open_instance
procd_set_param command "/usr/sbin/topologyd"
procd_set_param respawn

View File

@@ -59,9 +59,6 @@ mld_p_up_interfaces=""
mld_p_down_interfaces=""
mld_p_exceptions=""
# Standard parameters need by BCM's multicast daemon
allow_brdevice=0
proxdevs=""
ethwan="$(db -q get hw.board.ethernetWanPort)"
@@ -170,6 +167,36 @@ config_mcast_querier_params() {
echo "${protocol}-last-member-query-interval $last_mem_q_int" >> $CONFFILE
}
config_snooping_upstream_interface() {
local snooping_upstream_intf=""
json_load "$(devstatus $1)"
logger -t "mcastconf" "$(devstatus $1)"
itr=1
json_select bridge-members
# loop over the bridge and find the device on wan port
while json_get_var dev $itr; do
case "$dev" in
*.*)
port="$(echo "$dev" | cut -d'.' -f 1)"
if [ $port == $ethwan ]; then
ifconfig $dev | grep RUNNING >/dev/null && $snooping_upstream_intf="$dev" && break
fi
;;
esac
itr=$(($itr + 1))
done
json_select ..
# if none of the bridge members are on wan port, set the wan port itself
if [ -n "$snooping_upstream_intf" ]; then
echo "upstream-interface $snooping_upstream_intf" >>$CONFFILE
else
echo "upstream-interface $ethwan" >>$CONFFILE
fi
}
config_snooping_on_bridge() {
local protocol="$1"
local bcm_mcast_p=1
@@ -187,39 +214,6 @@ config_snooping_on_bridge() {
done
}
handle_bridged_proxy_interface() {
local p2="$1"
local p_enable=0
if [ "$p2" == "igmp" ]; then
p_enable=$igmp_p_enable
else
p_enable=$mld_p_enable
fi
if [ $p_enable -eq 1 -a $allow_brdevice -eq 1 ]
then
proxdevs="$proxdevs $2"
echo "upstream-interface $2" >>$CONFFILE
else
json_load "$(devstatus $2)"
itr=1
json_select bridge-members
while json_get_var dev $itr; do
case "$dev" in
*.*)
port="$(echo "$dev" | cut -d'.' -f 1)"
if [ $port == $ethwan ]; then
ifconfig $dev | grep RUNNING >/dev/null && proxdevs="$proxdevs $dev" && break
fi
;;
esac
itr=$(($itr + 1))
done
json_select ..
fi
}
config_mcast_proxy_interface() {
local itr
local p1="$1"
@@ -234,7 +228,8 @@ config_mcast_proxy_interface() {
for proxif in $2; do
case "$proxif" in
br-*)
handle_bridged_proxy_interface $p1 $proxif
proxdevs="$proxdevs $proxif"
echo "upstream-interface $proxif" >>$CONFFILE
;;
*)
ifconfig $proxif | grep RUNNING >/dev/null && proxdevs="$proxdevs $proxif"
@@ -246,7 +241,12 @@ config_mcast_proxy_interface() {
echo "${p1}-proxy-interfaces $proxdevs" >> $CONFFILE
fi
[ -n "$proxdevs" ] && echo "${p1}-mcast-interfaces $proxdevs" >> $CONFFILE
# if proxdevs is empty set the wan port as mcast-interface
if [ -n "$proxdevs" ]; then
echo "${p1}-mcast-interfaces $proxdevs" >> $CONFFILE
else
echo "${p1}-mcast-interfaces $ethwan" >> $CONFFILE
fi
}
configure_mcpd_snooping() {
@@ -259,14 +259,14 @@ configure_mcpd_snooping() {
if [ "$protocol" == "igmp" ]; then
config_snooping_common_params $protocol $igmp_s_version $igmp_s_robustness $igmp_s_mode
config_mcast_querier_params $protocol $igmp_s_query_interval $igmp_s_q_resp_interval $igmp_s_last_mem_q_int
config_mcast_proxy_interface $protocol "$igmp_s_iface"
config_snooping_upstream_interface "$igmp_s_iface"
config_snooping_on_bridge $protocol $igmp_s_iface $igmp_s_mode
exceptions=$igmp_s_exceptions
fast_leave=$igmp_s_fast_leave
elif [ "$protocol" == "mld" ]; then
config_snooping_common_params $protocol $mld_s_version $mld_s_robustness $mld_s_mode
config_mcast_querier_params $protocol $mld_s_query_interval $mld_s_q_resp_interval $mld_s_last_mem_q_int
config_mcast_proxy_interface $protocol "$mld_s_iface"
config_snooping_upstream_interface "$mld_s_iface"
config_snooping_on_bridge $protocol $mld_s_iface $mld_s_mode
exceptions=$mld_s_exceptions
fast_leave=$mld_s_fast_leave
@@ -458,7 +458,7 @@ read_mcast_stats() {
case $line in
br-*)
found_ip=0
grp_ip="$(echo $line | awk -F ' ' '{ print $9 }')"
grp_ip="$(echo $line | awk -F ' ' '{ print $10 }')"
if [ -z "$mcast_addrs" ]; then
mcast_addrs="$grp_ip"
continue
@@ -510,7 +510,7 @@ read_mcast_stats() {
if [ "$snoop_iface" != "$intf" ]; then
continue
fi
grp_ip="$(echo $line | awk -F ' ' '{ print $9 }')"
grp_ip="$(echo $line | awk -F ' ' '{ print $10 }')"
if [ "$grp_ip" != "$gip_addr" ]; then
continue
fi
@@ -523,12 +523,12 @@ read_mcast_stats() {
fi
json_add_object ""
host_ip="$(echo $line | awk -F ' ' '{ print $13 }')"
host_ip="$(echo $line | awk -F ' ' '{ print $14 }')"
h_ip="$(ipcalc.sh $host_ip | grep IP | awk '{print substr($0,4)}')"
json_add_string "ipaddr" "$h_ip"
src_port="$(echo $line | awk -F ' ' '{ print $2 }')"
json_add_string "device" "$src_port"
timeout="$(echo $line | awk -F ' ' '{ print $14 }')"
timeout="$(echo $line | awk -F ' ' '{ print $15 }')"
json_add_int "timeout" "$timeout"
json_close_object #close the associated device object
;;

View File

@@ -8,35 +8,26 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=netmode
PKG_VERSION:=0.2.0
PKG_SOURCE_VERSION:=5c8abbdf86e4651c7c6f14f784cfb52e69979f96
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/netmoded
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPLv2
PKG_LICENSE_FILES:=LICENSE
PKG_VERSION:=0.3.0
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0-only
include $(INCLUDE_DIR)/package.mk
define Package/netmode
CATEGORY:=Base system
DEPENDS:=+fping +ubus +libubox +libuci
TITLE:=Predefined Network Modes
CATEGORY:=Utilities
TITLE:=Network Modes and Utils
endef
define Package/netmode/description
Predefined Network Modes
Network Modes and Utils
endef
define Build/Compile
endef
define Package/netmode/install
$(CP) ./files/* $(1)/
$(INSTALL_DIR) $(1)/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/netmoded $(1)/sbin/
endef
$(eval $(call BuildPackage,netmode))

View File

@@ -1,8 +1,10 @@
config netmoded 'netmoded'
option enabled '0'
config setup 'setup'
option enabled '0'
option dir '/etc/netmodes'
config netmode global
option enabled 0
# option mode 'router'
#config testnet testnet
# option enabled 1
# option destination '8.8.8.8'
#config shiftrange shiftrange
# option enabled 1

View File

@@ -1,16 +1,16 @@
#!/bin/sh
# do not start testnet if the feature is explicitly disabled
[ "$(uci -q get netmode.testnet.enabled)" = "0" ] && exit 0
[ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 0
interface_check() {
local islan="$(uci -q get network.$INTERFACE.is_lan)"
[ "$islan" == "1" ] && exit 0
[ "$(uci -q get network.$INTERFACE.is_lan)" = "1" ] && exit 0
local proto="$(uci -q get network.$INTERFACE.proto)"
[ "$proto" == "none" ] && exit 0
[ "$(uci -q get network.$INTERFACE.proto)" = "none" ] && exit 0
local defroute="$(uci -q get network.$INTERFACE.defaultroute)"
[ "$defroute" == "0" ] && exit 0
[ "$(uci -q get network.$INTERFACE.defaultroute)" = "0" ] && exit 0
}
interface_check
@@ -19,4 +19,3 @@ if [ -n "$(pgrep -f testnet)" ]; then
else
testnet &
fi

View File

@@ -2,6 +2,9 @@
# this scripts shifts the lan network prefixes
# if a wan interface has the same network prefix.
# do not shift range if the feature is explicitly disabled
[ "$(uci -q get netmode.shiftrange.enabled)" == "0" ] && exit 0
. /lib/functions.sh
. /lib/functions/network.sh

View File

@@ -3,44 +3,71 @@
START=10
USE_PROCD=1
NETMODED="/sbin/netmoded"
. /lib/functions.sh
. /lib/functions/netmode.sh
start_netmoded() {
config_load netmode
MODEDIR="/etc/netmodes"
config_get enabled netmoded enabled 0
if [ "$enabled" != "1" ]; then
return
libnetmode_exec() {
when="$1"
# Execute /lib/netmode scripts
if [ -d /lib/netmode/$when ]; then
logger -s -p user.info -t "netmode" "Executing /lib/netmode/$when scripts"
for script in $(ls /lib/netmode/$when/); do
sh /lib/netmode/$when/$script
done
fi
procd_open_instance
procd_set_param command $NETMODED
procd_append_param command --verbose warning -i macaddr
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn
procd_close_instance
}
start_service() {
populate_netmodes
[ -f /etc/config/netmode ] || return
start_netmoded
}
config_load netmode
reload_service() {
switch_netmode
config_get_bool enabled global enabled '0'
[ $enabled -eq 0 ] && return
start_netmoded
# Get the desired netmode from config
config_get mode global mode
# Check if netmode is set as boot environment parameter
[ -n "$mode" ] || mode="$(fw_printenv -n netmode 2>/dev/null)"
# Return if mode is not set
[ -n "$mode" ] || return
# Get the last saved mode
lastmode="$(cat /etc/netmodes/.last_mode 2>/dev/null)"
# Return if desired mode is same as last saved mode
[ "$mode" == "$lastmode" ] && return
# Save mode as last mode
echo "$mode" > /etc/netmodes/.last_mode
logger -s -p user.info -t "netmode" "Switching to $mode Mode" >/dev/console
# Execute netmode generic pre-mode-switch scripts
libnetmode_exec "pre"
# Copy netmode UCI config files
if [ -d $MODEDIR/$mode/uci ]; then
logger -s -p user.info -t "netmode" "Copying $MODEDIR/$mode/uci/* to /etc/config/"
cp $MODEDIR/$mode/uci/* /etc/config/ 2>/dev/null
fi
# Execute netmode generic scripts
libnetmode_exec
# Execute mode specific scripts
if [ -d $MODEDIR/$mode/scripts ]; then
logger -s -p user.info -t "netmode" "Executing $MODEDIR/$mode/scripts/* scripts"
for script in $(ls $MODEDIR/$mode/scripts/); do
sh $MODEDIR/$mode/scripts/$script
done
fi
# Execute netmode generic post-mode-switch scripts
libnetmode_exec "post"
}
service_triggers()
{
procd_add_reload_trigger netmode
}

View File

@@ -1,9 +0,0 @@
{
"description": [
{ "en" : "Bridge Mode" }
],
"explanation": [
{ "en" : "NAT is disabled." }
],
"reboot" : 0
}

View File

@@ -1,92 +0,0 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
. /lib/functions.sh
BRIDGEPORTS=""
get_vlan() {
local device="$1"
for section in $(uci show network | grep "=device" | cut -d '=' -f1); do
if [ "$(uci -q get $section.ifname)" == "$device" ]; then
uci -q get $section.name
break
fi
done
}
add_wifi_devs()
{
add_wdev()
{
local cfg=$1
# local disabled
# config_get_bool disabled $cfg disabled 0
# config_get_bool ifname $cfg ifname
# if [ $disabled -eq 0 -a -n "$ifname" ]; then
# BRIDGEPORTS="$ifname"
# fi
uci -q set wireless.$cfg.network="wan"
}
config_load wireless
config_foreach add_wdev "wifi-iface"
uci -q commit wireless
}
add_xtm_devs() {
local section device vlan
for section in $(uci show dsl | grep "=.*tm-device" | cut -d'=' -f1); do
if [ -n "$(uci -q get $section.device)" ]; then
vlan="$(get_vlan $device)"
[ -n "$vlan" ] && device="$vlan"
if [ -n "$device" ]; then
BRIDGEPORTS="$BRIDGEPORTS $device"
fi
fi
done
}
add_eth_ports() {
add_port()
{
local cfg=$1
local ifname vlan
config_get ifname $cfg ifname
vlan="$(get_vlan $ifname)"
[ -n "$vlan" ] && ifname="$vlan"
if [ -n "$ifname" ]; then
BRIDGEPORTS="$BRIDGEPORTS $ifname"
fi
}
config_load ports
config_foreach add_port "ethport"
}
add_xtm_devs
add_eth_ports
add_wifi_devs
BRIDGEPORTS="$(echo $BRIDGEPORTS | sed -e 's/[[:space:]]*$//')"
uci -q set network.wan.type="bridge"
uci -q set network.wan.ifname="$BRIDGEPORTS"
uci -q set network.wan6.ifname="@wan"
uci -q delete network.lan.ifname
ubus call uci commit '{"config":"network"}'

View File

@@ -1,9 +0,0 @@
{
"description": [
{ "en" : "Router Mode" }
],
"explanation": [
{ "en" : "NAT is enabled." }
],
"reboot" : 0
}

View File

@@ -1,94 +0,0 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
. /lib/functions.sh
WANPORTS=""
LANPORTS=""
get_vlan() {
local device="$1"
for section in $(uci show network | grep "=device" | cut -d '=' -f1); do
if [ "$(uci -q get $section.ifname)" == "$device" ]; then
uci -q get $section.name
break
fi
done
}
add_wifi_devs()
{
add_wdev()
{
local cfg=$1
config_get mode $cfg mode "ap"
if [ "$mode" == "ap" ]; then
uci -q set wireless.$cfg.network="lan"
fi
}
config_load wireless
config_foreach add_wdev "wifi-iface"
uci -q commit wireless
}
add_xtm_devs() {
local section device vlan
for section in $(uci show dsl | grep "=.*tm-device" | cut -d'=' -f1); do
device="$(uci -q get $section.device)"
if [ -n "$device" ]; then
vlan="$(get_vlan $device)"
[ -n "$vlan" ] && device="$vlan"
if [ -n "$device" ]; then
WANPORTS="$WANPORTS $device"
fi
fi
done
}
add_eth_ports() {
add_port()
{
local cfg=$1
local uplink ifname vlan
config_get ifname $cfg ifname
config_get_bool uplink $cfg uplink 0
vlan="$(get_vlan $ifname)"
[ -n "$vlan" ] && ifname="$vlan"
if [ $uplink -eq 1 ]; then
WANPORTS="$WANPORTS $ifname"
else
LANPORTS="$LANPORTS $ifname"
fi
}
config_load ports
config_foreach add_port "ethport"
}
add_xtm_devs
add_eth_ports
add_wifi_devs
WANPORTS="$(echo $WANPORTS | sed -e 's/[[:space:]]*$//')"
LANPORTS="$(echo $LANPORTS | sed -e 's/[[:space:]]*$//')"
uci -q set network.wan.type="anywan"
uci -q set network.wan.ifname="$WANPORTS"
uci -q set network.wan6.ifname="@wan"
uci -q set network.lan.type="bridge"
uci -q set network.lan.ifname="$LANPORTS"
ubus call uci commit '{"config":"network"}'

View File

@@ -1,13 +0,0 @@
#!/bin/sh
. /lib/functions.sh
add_owsd_ubusproxy_object_netmode() {
local netmd=$(uci -q get owsd.ubusproxy.object | grep netmode)
if [ -z "$netmd" ]; then
uci -q add_list owsd.ubusproxy.object="netmode"
uci commit owsd
fi
}
add_owsd_ubusproxy_object_netmode

View File

@@ -1,150 +0,0 @@
#!/bin/sh
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
MODEDIR=$(uci -q get netmode.setup.dir)
[ -n "$MODEDIR" ] || MODEDIR="/etc/netmodes"
run_netmode_scripts() {
local mode=$1
local when=$2
local script
local path
path=$(readlink -f /etc/netmodes/$mode/)
[ "${path:0:14}" == "/etc/netmodes/" ] || exit
if [ -d /etc/netmodes/$mode/scripts/$when ]; then
logger -s -p user.info -t "netmode" "Executing $when netmode scripts" >/dev/console
for script in $(ls /etc/netmodes/$mode/scripts/$when/); do
sh /etc/netmodes/$mode/scripts/$when/$script
done
fi
}
switch_netmode() {
[ -f /etc/config/netmode -a -d $MODEDIR ] || return
config_load netmode
local enabled
config_get_bool enabled setup enabled '0'
[ $enabled -eq 0 ] && return
local mode
config_get mode setup mode
[ -d "/etc/netmodes/$mode" ] || return
logger -s -p user.info -t "netmode" "Switching to $mode Mode" >/dev/console
run_netmode_scripts $mode "pre"
local reboot=$(uci -q get netmode.$mode.reboot)
if [ "$reboot" == "1" ]; then
#run_netmode_scripts $mode "post"
reboot &
exit
fi
#run_netmode_scripts $mode "post"
}
populate_netmodes() {
[ -f /etc/config/netmode -a -d $MODEDIR ] || return
config_load netmode
local enabled
config_get_bool enabled setup enabled '0'
[ $enabled -eq 0 ] && return
delete_netmode() {
uci delete netmode.$1
}
config_foreach delete_netmode netmode
uci commit netmode
local hardware=$(db -q get hw.board.model_name)
local keys lang desc exp exclude support
for mode in $(ls $MODEDIR); do
lang=""
desc=""
exp=""
uci -q set netmode.$mode=netmode
json_load "$(cat $MODEDIR/$mode/DETAILS)"
if json_select excluded_boards; then
exclude=0
_i=1
while json_get_var board $_i; do
case "$hardware" in
$board)
uci -q delete netmode.$mode
exclude=1
break
;;
esac
_i=$((_i+1))
done
json_select ..
[ $exclude -eq 1 ] && continue
elif json_select supported_boards; then
support=0
_i=1
while json_get_var board $_i; do
case "$hardware" in
$board)
support=1
break
;;
esac
_i=$((_i+1))
done
json_select ..
[ $support -eq 1 ] || {
uci -q delete netmode.$mode
continue
}
fi
json_select description
json_get_keys keys
for k in $keys; do
json_get_keys lang $k
lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//')
json_select $k
json_get_var desc $lang
uci -q set netmode.$mode."desc_$lang"="$desc"
[ "$lang" == "en" ] && uci -q set netmode.$mode."desc"="$desc"
json_select ..
done
json_select ..
json_select explanation
json_get_keys keys
for k in $keys; do
json_get_keys lang $k
lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//')
json_select $k
json_get_var exp $lang
uci -q set netmode.$mode."exp_$lang"="$exp"
[ "$lang" == "en" ] && uci -q set netmode.$mode."exp"="$exp"
json_select ..
done
json_select ..
json_get_var cred credentials
uci -q set netmode.$mode.askcred="$cred"
json_get_var ulb uplink_band
uci -q set netmode.$mode.uplink_band="$ulb"
json_get_var reboot reboot
uci -q set netmode.$mode.reboot="$reboot"
done
uci commit netmode
}

View File

@@ -31,7 +31,10 @@ test_connection() {
internet_test() {
local link dest
dest="$(uci -q get diagnostics.@connectivity[0].destination)"
# use the destination address given in config for connectivity check
dest="$(uci -q get netmode.testnet.destination)"
# for backwards compatibility
[ -n "$dest" ] || dest="$(uci -q get diagnostics.@connectivity[0].destination)"
test_connection $dest

View File

@@ -36,7 +36,7 @@ endef
define Package/obudpst/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/udpst $(1)/usr/sbin/obudpst
$(INSTALL_BIN) $(PKG_BUILD_DIR)/udpst $(1)/usr/sbin/udpst
endef
$(eval $(call BuildPackage,obudpst))

View File

@@ -1,5 +1,7 @@
if PACKAGE_obuspa
menu "Configuration"
config OBUSPA_MTP_ENABLE_STOMP
bool "Enable STOMP as mtp protocol"
default y
@@ -11,5 +13,5 @@ config OBUSPA_MTP_ENABLE_MQTT
config OBUSPA_MTP_ENABLE_COAP
bool "Enable CoAP as mtp protocol"
default y
endmenu
endif

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=obuspa
PKG_VERSION:=4.1.0.6
PKG_VERSION:=4.1.0.18
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=817cb955fe010e2c3a1cdcc22c4daac3b9064126
PKG_SOURCE_VERSION:=af3d4663d66942e3b0e3253375c5620629769aa5
PKG_SOURCE_URL:=https://dev.iopsys.eu/fork/obuspa.git
PKG_MAINTAINER:=Vivek Dutta <vivek.dutta@iopsys.eu>
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
@@ -29,6 +29,7 @@ include $(INCLUDE_DIR)/package.mk
define Package/obuspa
SECTION:=utils
CATEGORY:=Utilities
SUBMENU:=TRx69
TITLE:=USP agent
DEPENDS:=+libopenssl +libcurl +libsqlite3 +libubox +libubus +uspd +libmosquitto
endef
@@ -80,13 +81,11 @@ define Package/obuspa/install
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/obuspa
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_BIN) $(PKG_BUILD_DIR)/obuspa $(1)/usr/sbin/
$(INSTALL_BIN) ./files/etc/init.d/obuspa $(1)/etc/init.d/
$(INSTALL_DATA) ./files/etc/config/obuspa $(1)/etc/config/
$(INSTALL_DATA) ./files/etc/obuspa/roles.json $(1)/etc/obuspa/roles.json
$(INSTALL_DATA) ./files/etc/obuspa/dmcaching_exclude.json $(1)/etc/obuspa/dmcaching_exclude.json
$(INSTALL_BIN) ./files/etc/hotplug.d/iface/85-obuspa $(1)/etc/hotplug.d/iface/
endef
$(eval $(call BuildPackage,obuspa))

View File

@@ -1,9 +1,10 @@
config obuspa 'global'
option enabled '1'
option interface 'wan'
#option ifname 'eth0.1'
option debug '0'
option interface 'loopback'
#option ifname 'lo'
option debug '1'
option log_level '1'
option prototrace '0'
#option db_file '/etc/obuspa/usp.db'
#option role_file '/etc/obuspa/roles.json'
option dm_caching_exclude '/etc/obuspa/dmcaching_exclude.json'
@@ -46,7 +47,7 @@ config subscription
# option Description 'Request to get Administrative access'
# option role_name 'full_access'
# option Enable '1'
# option Value 'admin'
# option Value 'YWRtaW4='
# option Retries 2
# option LockoutPeriod 60
@@ -54,6 +55,6 @@ config subscription
# option Description 'Request to get User access'
# option role_name 'user'
# option Enable '1'
# option Value 'user'
# option Value 'dXNlcg=='
# option Retries 3
# option LockoutPeriod 30

View File

@@ -1,11 +0,0 @@
#!/bin/sh
[ "$(uci -q get obuspa.global.interface)" == "$INTERFACE" ] || exit 0
[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0
[ "$ACTION" = ifupdate -a -z "$IFUPDATE_ADDRESSES" ] && exit 0
echo "Restarting obuspa"|logger -t obuspa.hotplug -p debug
/etc/init.d/obuspa reload

View File

@@ -67,7 +67,7 @@ get_role_index_from_json() {
local num=0
# In case of role is empty or file not present
if [ -z "${role}" -o ! -f ${role_def_file} ]; then
if [ -z "${role}" -o ! -f "${role_def_file}" ]; then
return 0
fi
@@ -98,7 +98,7 @@ get_role_index_from_json() {
get_uci_ref_index() {
local val;
[ -f ${USP_TEMP_FILE} ] && rm -f ${USP_TEMP_FILE}
[ -f "${USP_TEMP_FILE}" ] && rm -f ${USP_TEMP_FILE}
index=0
config_load $CONFIGURATION
@@ -123,6 +123,7 @@ validate_obuspa_section()
'interface:string' \
'ifname:string:br-lan' \
'debug:bool:false' \
'prototrace:bool:false' \
'log_level:uinteger' \
'log_dest:string' \
'db_file:string' \
@@ -133,7 +134,6 @@ validate_localagent_section()
{
uci_validate_section ${CONFIGURATION} localagent "${1}" \
'Enable:bool:true' \
'ParameterName:string:Device.DeviceInfo.SoftwareVersion' \
'EndpointID:string'
}
@@ -153,6 +153,7 @@ validate_controller_section()
'Reference:string' \
'Destination:string:controller-notify-dest' \
'Topic:string' \
'ParameterName:list(string)' \
'coap_host:host' \
'coap_path:string' \
'coap_port:port' \
@@ -222,9 +223,55 @@ validate_mqtt_client_section()
'ConnectRetryMaxInterval:uinteger:60'
}
get_oui_from_db() {
local oui="$(db get device.deviceinfo.ManufacturerOUI)"
echo "${oui}"
}
get_serial_from_db() {
local serial="$(db get device.deviceinfo.SerialNumber)"
# this can encoded further
echo "${serial}"
}
publish_endpoint() {
local AgentEndpointID serial oui user pass
local opt=""
# return if mosquitto_pub is not present
if [ ! "$(which mosquitto_pub)" ]; then
log "mosquitto_pub not present can't publish EndpointID"
return 0;
fi
# Get endpoint id from obuspa config first
config_load obuspa
config_get AgentEndpointID localagent EndpointID ""
if [ -z "${AgentEndpointID}" ]; then
serial=$(get_serial_from_db)
oui=$(get_oui_from_db)
AgentEndpointID="os::${oui}-${serial}"
fi
config_get user localmqtt Username
if [ -n "${user}" ]; then
opt="-u ${user}"
fi
config_get pass localmqtt Password
if [ -n "${pass}" ]; then
opt="${opt} -P ${pass}"
fi
# publish Agent's EndpointID in mosquito broker for discovery by usp-js
# This is a work around till obuspa adds supports for mDNS discovery
log "Publishing EndpointID ${AgentEndpointID} to local mqtt broker"
mosquitto_pub -r -t "obuspa/EndpointID" -m "${AgentEndpointID}" ${opt}
}
configure_localagent() {
local Enable ParameterName EndpointID
local _num
validate_localagent_section 'localagent' || {
log "Validation of localagent section failed"
@@ -235,14 +282,6 @@ configure_localagent() {
db_set Device.LocalAgent.EndpointID "${EndpointID}"
fi
_num=1
while [ ${_num} -le ${controller_num} ]
do
db_set Device.LocalAgent.Controller.${_num}.BootParameter.1.Enable "${Enable}"
db_set Device.LocalAgent.Controller.${_num}.BootParameter.1.ParameterName "${ParameterName}"
_num=$(( ${_num} + 1 ))
done
db_set
}
@@ -266,17 +305,17 @@ configure_controller() {
return 1;
fi
if [ -z ${Reference} ]; then
if [ ${Protocol} = "STOMP" ]; then
if [ -z "${Reference}" ]; then
if [ "${Protocol}" = "STOMP" ]; then
val=$(get_uci_ref_index stomp ${stomp})
if [ ${val} -eq 0 ]; then
if [ "${val}" -eq 0 ]; then
log "Not able to find the referred stomp section"
return 1;
fi
Reference="Device.STOMP.Connection.${val}"
elif [ ${Protocol} = "MQTT" ]; then
elif [ "${Protocol}" = "MQTT" ]; then
val=$(get_uci_ref_index mqtt ${mqtt})
if [ ${val} -eq 0 ]; then
if [ "${val}" -eq 0 ]; then
log "Not able to find the referred mqtt section"
return 1;
fi
@@ -326,6 +365,17 @@ configure_controller() {
log "Unsupported Protocol ${Protocol}"
fi
local param
local _pnum=1
for param in ${ParameterName}
do
db_set Device.LocalAgent.Controller.${controller_num}.BootParameter.${_pnum}.Alias "cpe-${_pnum}"
db_set Device.LocalAgent.Controller.${controller_num}.BootParameter.${_pnum}.Enable "${Enable}"
db_set Device.LocalAgent.Controller.${controller_num}.BootParameter.${_pnum}.ParameterName "${param}"
_pnum=$(( ${_pnum} + 1 ))
done
db_set
}
@@ -342,9 +392,9 @@ configure_subscription(){
log "No recipient for subscription"
fi
if [ -z ${Recipient} ]; then
if [ -z "${Recipient}" ]; then
val=$(get_uci_ref_index controller ${controller})
if [ ${val} -eq 0 ]; then
if [ "${val}" -eq 0 ]; then
log "Not able to find the referred controller section"
return 1;
fi
@@ -378,9 +428,9 @@ validate_challenge_section()
check_json_load()
{
local ret=0
if [ -f ${role_def_file} ]; then
if [ -f "${role_def_file}" ]; then
json_init
json_load_file ${role_def_file} 2>&1 |grep -q Failed
json_load_file "${role_def_file}" 2>&1 |grep -q Failed
if [ $? -eq 0 ]; then # In case of invalid json file
log "failed to load [${role_def_file}]"
ret=1
@@ -424,7 +474,7 @@ configure_challenges() {
exit 1;
}
if [ -z "${role_name}" -a -z ${Role} ]; then
if [ -z "${role_name}" -a -z "${Role}" ]; then
log "Either role_name or Role must defined for a challenge";
return 1;
fi
@@ -460,17 +510,17 @@ configure_mtp() {
return 1;
}
if [ -z ${Reference} ]; then
if [ ${Protocol} = "STOMP" ]; then
if [ -z "${Reference}" ]; then
if [ "${Protocol}" = "STOMP" ]; then
val=$(get_uci_ref_index stomp ${stomp})
if [ ${val} -eq 0 ]; then
if [ "${val}" -eq 0 ]; then
log "Referred stomp section not found"
return 1;
fi
Reference="Device.STOMP.Connection.${val}"
elif [ ${Protocol} = "MQTT" ]; then
elif [ "${Protocol}" = "MQTT" ]; then
val=$(get_uci_ref_index mqtt ${mqtt})
if [ ${val} -eq 0 ]; then
if [ "${val}" -eq 0 ]; then
log "Referred mqtt section not found"
return 1;
fi
@@ -566,7 +616,7 @@ configure_mqtt_client(){
configure_obuspa() {
local enabled trust_cert ifname interface debug log_level db_file log_dest role_file
local enabled trust_cert ifname interface debug prototrace log_level db_file log_dest role_file
validate_obuspa_section "global" || {
log "Validation of global section failed"
@@ -575,15 +625,18 @@ configure_obuspa() {
role_def_file="${role_file}"
if [ ${debug} -eq 1 ]; then
if [ "${debug}" -eq 1 ]; then
# Forward stdout of the command to logd
procd_set_param stdout 1
# Same for stderr
procd_set_param stderr 1
fi
if [ "${debug}" -eq 1 -a "${prototrace}" -eq 1 ]; then
procd_append_param command -p
fi
if [ -n ${log_level} ]; then
if [ "${debug}" -eq 1 -a -n "${log_level}" ]; then
procd_append_param command -v ${log_level}
fi
@@ -593,7 +646,6 @@ configure_obuspa() {
if [ -n "${interface}" ]; then
network_get_physdev ifname ${interface}
log "ifname from ${interface} is ${ifname}"
fi
# Set this variable for root user and obuspa -c tool
@@ -649,8 +701,7 @@ db_init() {
}
service_running() {
ubus wait_for usp.raw
procd_running ${CONFIGURATION}
publish_endpoint
}
start_service() {
@@ -664,8 +715,6 @@ start_service() {
return 0;
fi
ubus wait_for usp.raw
procd_open_instance ${CONFIGURATION}
procd_set_param command ${PROG}
db_init
@@ -690,8 +739,8 @@ stop_service() {
db_file="/tmp/usp.db"
fi
[ -f ${db_file} ] && rm -f ${db_file}
[ -f ${PARAM_FILE} ] && rm -f ${PARAM_FILE}
[ -f "${db_file}" ] && rm -f ${db_file}
[ -f "${PARAM_FILE}" ] && rm -f ${PARAM_FILE}
}
reload_service() {

View File

@@ -289,8 +289,8 @@ parser_timeout()
#data format is digital with time unit
#10s-10 seconds 10m-10 minutes 10h-10 hours 10d-10 days
if [ -n "$1" ]; then
flag=$(echo "$1"| tr -d [0-9] | tr '[A-Z]' '[a-z]')
data=$(echo "$1"| tr -cd [0-9])
flag=$(echo "$1"| tr -d '0-9' | tr 'A-Z' 'a-z')
data=$(echo "$1"| tr -cd '0-9')
case $flag in
m)

View File

@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=periodicstats
PKG_VERSION:=1.0.3
PKG_VERSION:=1.1.0
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=312573b91b2ae10d0fe04a4d11ae37898f526fdb
PKG_SOURCE_VERSION:=7426c7458f792cc66920c206d62869c5620f1400
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/periodicstats.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
@@ -26,7 +26,7 @@ define Package/periodicstats
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Periodic Statistics Daemon
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libbbfdm +libbbf_api +uspd
DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +libjson-c +libbbf_api
endef
define Package/periodicstats/description

View File

@@ -4,26 +4,23 @@ START=99
STOP=10
USE_PROCD=1
NAME=periodicstatsd
PROG=/usr/sbin/periodicstatsd
. /lib/functions.sh
start_service() {
ubus wait_for usp
if [ -f "/etc/config/periodicstats" ]; then
if [ "$(uci -q get periodicstats.globals.enable)" == "1" ]; then
procd_open_instance periodicstatsd
procd_set_param command ${PROG}
procd_set_param respawn
procd_close_instance
fi
fi
service_running() {
ubus -t 10 wait_for usp.raw
}
stop() {
#stop_service() is called after procd killed the service
echo ;
start_service() {
enable=$(uci -q get periodicstats.globals.enable)
if [ "$(enable)" != "1" ]; then
return 0;
fi
procd_open_instance periodicstatsd
procd_set_param command ${PROG}
procd_set_param respawn
procd_close_instance
}
service_triggers() {

View File

@@ -12,7 +12,7 @@ PKG_NAME:=peripheral_manager
PKG_VERSION:=1.0.6
PKG_RELEASE:=1
PKG_SOURCE_VERSION:=785166a9861a119623556163179915727896156b
PKG_SOURCE_VERSION:=15ba90f01914113e7c5e8f8a6df6279c882e8265
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/peripheral-manager

View File

@@ -6,11 +6,11 @@ usage () {
}
[ $# -ne 1 ] && usage
ledstate=$(echo $1 | tr '[A-Z]' '[a-z]')
ledstate=$(echo $1 | tr 'A-Z' 'a-z')
case $ledstate in
normal|test|allon|alloff|production)
ubus call leds set "{\"state\" : \"$ledstate\"}"
ubus call leds set "{\"state\" : \"$ledstate\"}"
;;
*)
usage

38
ponmngr/Makefile Normal file
View File

@@ -0,0 +1,38 @@
#
# Copyright (C) 2013-2021 iopsys
#
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=ponmngr
PKG_VERSION:=1.0.0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
PKG_LICENSE:=GPL-2.0-only
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
define Package/ponmngr
CATEGORY:=Utilities
TITLE:=ponmngr packets manager daemon
endef
define Package/ponmngr/description
Configures pon
endef
#define Build/Prepare
# $(CP) -rf ./ponmngr/* $(PKG_BUILD_DIR)/
#endef
define Build/Compile
endef
define Package/ponmngr/install
$(CP) ./files/* $(1)/
endef
$(eval $(call BuildPackage,ponmngr))

36
ponmngr/files/etc/init.d/pon Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/sh /etc/rc.common
START=98
STOP=10
USE_PROCD=1
NAME=ponmngr
PROG="/usr/sbin/omcid start"
include /lib/pon
start_service() {
if [ -f "/etc/config/pon" ]; then
procd_open_instance $NAME
procd_set_param command ${PROG}
procd_set_param respawn
procd_close_instance
start_gpon
fi
}
boot() {
start
}
stop_service() {
service_stop ${PROG}
stop_gpon
}
reload_service() {
stop
start
}

View File

@@ -0,0 +1,27 @@
#!/bin/sh
basemac="$(db -q get hw.board.basemac | tr -d ':')"
if [ -s "/etc/config/pon" ]; then
if uci -q get pon.globals >/dev/null; then
# return if there is any valid content
exit
else
rm -f /etc/config/pon
fi
fi
touch /etc/config/pon
mac=''
if [ -z "$basemac" ]; then
mac="12345678"
else
# read last 8 characters of basemac without :
mac=${basemac: -8}
fi
uci set pon.globals=globals
uci set pon.globals.enabled="1"
uci set pon.globals.serial_number="BRCM$mac"
uci commit pon

View File

@@ -0,0 +1,70 @@
#!/bin/sh
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
configure_snpwd() {
local serial_no password
serial_no="$1"
password="$2"
# serial number comprises of 2 parts, vendor id and vendor specific, the vendor id is
# a string while the vendor specific is a hex, so split the 2 and set accordingly
local vendor_id vendor_specific
vendor_id=${serial_no:0:4}
vendor_specific=${serial_no: -8}
# attempt to conver vendor_id from string to hex
vendor_id=$(echo $vendor_id | hexdump -e '4/1 "%02X" "\n"')
vendor_id=${vendor_id:0:8}
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure gpon onu_sn={vendor_id=$vendor_id,vendor_specific=$vendor_specific}
if [ -n "$password" ]; then
password=$(echo $password | hexdump -n ${#password} -e '16/1 "%02X""\n"')
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure gpon password=$password
fi
}
configure_gpon() {
local enabled serial_no password
config_load pon
config_get enabled globals "enabled"
if [ "$enabled" == "0" ]; then
exit
fi
config_get serial_no globals "serial_number"
config_get password globals "password"
configure_snpwd $serial_no $password
}
start_gpon() {
if [ -n "$(which gponctl)" ]; then
configure_gpon
gponctl start
fi
}
stop_gpon() {
if [ -n "$(which gponctl)" ]; then
gponctl stop
fi
}
get_gpon_status() {
json_init
status="$(gponctl getstate)"
admin_status="$(echo $status | head -n1 | awk '{print $8;}')"
json_add_string "admin_status" "$admin_status"
op_status="$(echo $status | head -n1 | awk '{print $12;}')"
case $op_status in
NUMBER)
op_status="$(echo $status | head -n1 | awk '{print $13;}')"
;;
esac
op_status=${op_status:1:2}
json_add_string "operational_status" "$op_status"
json_dump
}

View File

@@ -0,0 +1,19 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
. /lib/functions.sh
include /lib/pon
case "$1" in
list)
echo '{ "status": {} }'
;;
call)
case "$2" in
status)
get_gpon_status
;;
esac
;;
esac

View File

@@ -1,19 +1,9 @@
#!/bin/sh
. /lib/network/utils.sh
populate_config_from_db() {
. /lib/network/utils.sh
populate_config(){
if [ -s "/etc/config/ports" ]; then
if uci -q get ports.@ethport[0] >/dev/null; then
# return if there is any valid content
return 0
else
rm -f /etc/config/ports
fi
fi
touch /etc/config/ports
local portorder="$(db -q get hw.board.ethernetPortOrder)"
portorder="$(db -q get hw.board.ethernetPortOrder)"
for port in $portorder; do
uci add ports ethport
uci rename ports.@ethport[-1]="$(get_port_name $port)"
@@ -35,4 +25,44 @@ populate_config(){
uci commit ports
}
[ -f /sbin/db -a -f /etc/board-db/config/hw ] && populate_config
populate_config_from_device_tree() {
for port in $(find /proc/device-tree/ -name "port@*"); do
port="$(cat $port/label)"
[ -n "$port" ] || continue
[ "$port" = "cpu" ] && continue
PORT="$(echo $port | tr '[a-z]' '[A-Z]')"
uci add ports ethport
uci rename ports.@ethport[-1]="$PORT"
uci set ports.@ethport[-1].enabled=1
uci set ports.@ethport[-1].name="$PORT"
uci set ports.@ethport[-1].ifname="$port"
uci set ports.@ethport[-1].speed=1000
uci set ports.@ethport[-1].duplex="full"
uci set ports.@ethport[-1].autoneg=1
uci set ports.@ethport[-1].eee=0
if [ "$port" = "wan" ]; then
uci set ports.@ethport[-1].pause=1
uci set ports.@ethport[-1].uplink=1
else
uci set ports.@ethport[-1].pause=0
fi
done
uci commit ports
}
if [ -s "/etc/config/ports" ]; then
if uci -q get ports.@ethport[0] >/dev/null; then
# exit if there is any valid content
exit 0
else
rm -f /etc/config/ports
fi
fi
touch /etc/config/ports
if [ -f /sbin/db ] && [ -f /etc/board-db/config/hw ]; then
populate_config_from_db
elif [ -d /proc/device-tree/ ]; then
populate_config_from_device_tree
fi

View File

@@ -6,12 +6,12 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=qosmngr
PKG_VERSION:=1.0.2
PKG_VERSION:=1.0.4
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=460327011d932580f55c7b70acb1e652dd3c95a3
PKG_SOURCE_VERSION:=e3d608e4bacd367fed99bcdd7f56b3fba7b02891
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/qosmngr.git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip

View File

@@ -21,6 +21,10 @@ generate_queue(){
case $cpu_model in
68*) no_of_q="0 1 2 3" ;;
esac
if grep -qE '[0-9]+ archer$' /proc/devices; then
no_of_q="0 1 2 3"
fi
fi
i=0

View File

@@ -327,6 +327,15 @@ broute_filter_on_ether_type() {
BR_RULE="$BR_RULE --proto $1"
}
broute_filter_on_dscp() {
# The broadcom option --ip-dscp-extend actually accepts tos
# and not dscp and that too in hex, hence, perform the conversion
# from dscp in uci to tos first and then convert to hex
tos_val=$(($1<<2))
tos_hex=$(printf "%x" $tos_val)
BR_RULE="$BR_RULE --ip-dscp-extend $tos_hex"
}
broute_filter_on_vid() {
case "$BR_RULE" in
*proto*)
@@ -357,6 +366,7 @@ handle_ebtables_rules() {
config_get src_if "$sid" "ifname"
config_get src_mac "$sid" "src_mac"
config_get dst_mac "$sid" "dst_mac"
config_get dscp_filter "$sid" "dscp_filter"
config_get pcp_check "$sid" "pcp_check"
config_get eth_type "$sid" "ethertype"
config_get vid "$sid" "vid_check"
@@ -395,6 +405,13 @@ handle_ebtables_rules() {
is_l2_rule=1
fi
if [ -n "$dscp_filter" ]; then
# filter on ethertype and proto is same thing
broute_filter_on_ether_type IPv4
broute_filter_on_dscp $dscp_filter
is_l2_rule=1
fi
if [ -n "$eth_type" ]; then
broute_filter_on_ether_type $eth_type
is_l2_rule=1
@@ -673,17 +690,20 @@ assign_policer_to_port() {
local pindex="$2"
local portorder="$(db -q get hw.board.ethernetPortOrder)"
local wanport="$(db -q get hw.board.ethernetWanPort)"
local runner_lan_ports="$(bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/examine port | grep ': port/index=lan' | sed -e 's#\.##g' | cut -f2 -d' ' | sort -u | xargs)"
local i=1
for port in $portorder; do
if [ "$ifname" == "$port" ]; then
if [ "$wanport" == "$port" ]; then
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure port/index=wan0 ingress_rate_limit={traffic_types=8,policer={policer/dir=us,index=$pindex}}
else
local i="${port: -1}"
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure port/index=lan$i ingress_rate_limit={traffic_types=8,policer={policer/dir=us,index=$pindex}}
local lanport="$(echo -n "$runner_lan_ports" | cut -f${i} -d' ')"
bdmf_shell -c `cat /var/bdmf_sh_id` -cmd /b/configure $lanport ingress_rate_limit={traffic_types=8,policer={policer/dir=us,index=$pindex}}
fi
break
fi
i=$((i+1))
done
}
@@ -747,11 +767,6 @@ config_ingress_rate_limit() {
local in_burst_size=$3
local wanport="$(db -q get hw.board.ethernetWanPort)"
if [ "$ifname" == "$wanport" ]; then
logger -t qosmngr "policing is not support on port $ifname"
return
fi
# Unit in uci file is in bps while that accepted by ethswctl is kbits
if [ $ingress_rate -lt 1000 ]; then
return
@@ -766,8 +781,8 @@ config_ingress_rate_limit() {
fi
local unitport="$(get_port_number $ifname)"
local unit=$(echo $unitport | cut -d ' ' -f 1)
local port=$(echo $unitport | cut -d ' ' -f 2)
local unit=$(echo $unitport | cut -d ' ' -f 1)
local port=$(echo $unitport | cut -d ' ' -f 2)
ethswctl -c rxratectrl -n $unit -p $port -x $ingress_rate -y $in_burst_size
}
@@ -827,7 +842,7 @@ configure_classify() {
fcctl flush
}
configure_queue() {
pre_configure_queue() {
# Delete queues
rm -rf /tmp/qos/queue_stats
@@ -841,12 +856,15 @@ configure_queue() {
for i in 0 1 2 3 4 5 6 7; do
tmctl delqcfg --devtype 0 --if $intf --qid $i &>/dev/null
done
tmctl porttminit --devtype 0 --if $intf --flag 0 --numqueues 8
mkdir -p /tmp/qos/$intf
touch /tmp/qos/$intf/q_order
touch /tmp/qos/$intf/q_precedence
done
}
configure_queue() {
# Load UCI file
config_load qos
config_foreach handle_q_order queue
@@ -864,7 +882,7 @@ configure_policer() {
local port=$(echo $unitport | cut -d ' ' -f 2)
# setting rate and burst size to 0 disables rate limiting
if [ $port != "" -a $unit != "" ]; then
ethswctl -c rxratectrl -n $unit -p $intf -x 0 -y 0
ethswctl -c rxratectrl -n $unit -p $port -x 0 -y 0
fi
done
fi
@@ -897,6 +915,7 @@ configure_qos() {
#queue configuration is being done after shaper configuration,
#If port shapingrate configuration on DISC device is called after queue configuration then
#driver overwrites the queue shaping rate with default value of port shaping rate.
pre_configure_queue
configure_shaper
configure_queue
configure_policer
@@ -916,6 +935,7 @@ reload_qos() {
elif [ "$service_name" == "shaper" ]; then
configure_shaper
elif [ "$service_name" == "queue" ]; then
pre_configure_queue
configure_queue
elif [ "$service_name" == "classify" ]; then
configure_classify

View File

@@ -6,9 +6,9 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=questd
PKG_VERSION:=5.2.2
PKG_VERSION:=5.2.3
PKG_SOURCE_VERSION:=cd05311b505cc5025a8559c616b55e9fb4d1857d
PKG_SOURCE_VERSION:=cf54bd65ec821ac67f3aa1caeebcd3ea9aae07ad
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/questd

View File

@@ -12,12 +12,3 @@ start_service() {
procd_set_param respawn
procd_close_instance
}
service_triggers()
{
procd_add_reload_trigger network wireless
}
reload_service() {
ubus -t 5 call router.network reload
}

View File

@@ -1,54 +0,0 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
. /lib/functions/network.sh
. /lib/functions.sh
case "$1" in
list)
echo '{ "dump" : {}, "hosts" : {} }'
;;
call)
case "$2" in
dump)
dump_network() {
local cfg="$1"
local is_lan type bool proto ipaddr netmask ifname
[ "$cfg" == "loopback" ] && return
config_get_bool is_lan $cfg is_lan 0
config_get type $cfg type
config_get_bool defaultroute $cfg defaultroute 1
config_get proto $cfg proto none
config_get ipaddr $cfg ipaddr
[ -z "$ipaddr" ] && network_get_ipaddr ipaddr $cfg
config_get netmask $cfg netmask "255.255.255.255"
config_get ifname $cfg ifname
json_add_object "$cfg"
json_add_boolean is_lan $is_lan
json_add_string type "$type"
json_add_boolean defaultroute $defaultroute
json_add_string proto "$proto"
json_add_string ipaddr "$ipaddr"
json_add_string netmask "$netmask"
json_add_string ifname "$ifname"
json_select ..
}
config_load network
json_init
config_foreach dump_network interface
json_dump
;;
hosts)
ubus call topology hosts | \
sed 's/interface_type/type/g' | \
sed 's/Ethernet/ethernet/g' | \
sed 's/Wi-Fi/wifi/g'
;;
esac
;;
esac

View File

@@ -0,0 +1,55 @@
#
# Copyright (c) 2020 Genexis B.V.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use, copy,
# modify, merge, publish, distribute, sublicense, and/or sell copies
# of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=quickjs-websocket
PKG_LICENSE:=MIT
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
define Package/quickjs-websocket
SECTION:=libs
CATEGORY:=Libraries
TITLE:=WebSocket API for QuickJS
MAINTAINER:=Erik Karlsson <erik.karlsson@genexis.eu>
DEPENDS:=+quickjs +libwebsockets
endef
define Package/quickjs-websocket/description
Implementation of the W3C WebSocket API in QuickJS on top of the
libwebsockets C library.
endef
define Package/quickjs-websocket/install
$(INSTALL_DIR) $(1)/usr/lib/quickjs
$(CP) $(PKG_BUILD_DIR)/lws-client.so $(1)/usr/lib/quickjs/
$(CP) $(PKG_BUILD_DIR)/websocket.js $(1)/usr/lib/quickjs/
endef
$(eval $(call BuildPackage,quickjs-websocket))

23
quickjs-websocket/README Executable file
View File

@@ -0,0 +1,23 @@
WebSocket API for QuickJS
===============
Introduction
------------
This is an implementation of the W3C WebSocket API for the QuickJS
JavaScript engine on top of the libwebsockets C library.
Usage
------------
import { WebSocket } from '/usr/lib/quickjs/websocket.js'
const w = new WebSocket('wss://example.com/', ['protocol1', 'protocol2'])
globalThis.WebSocket = WebSocket // To make the API available globally
Limitations
------------
Events emitted by WebSocket objects do not implement the full DOM
event specification. Only a subset of properties is available. The
EventTarget interface, i.e. addEventListener/removeEventListener, is
unimplemented. The onopen/onerror/onclose/onmesseage handlers have to
be used instead.

View File

@@ -0,0 +1,38 @@
#
# Copyright (c) 2020 Genexis B.V.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use, copy,
# modify, merge, publish, distribute, sublicense, and/or sell copies
# of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
TARGETS = lws-client.so
CFLAGS += -Os -Wall -Werror
all: $(TARGETS)
%.pic.o: %.c
$(CC) $(CFLAGS) -fPIC -c -o $@ $<
lws-client.so: lws-client.pic.o
$(CC) $(LDFLAGS) -shared -o $@ $^ -lwebsockets
clean:
rm -f *.o $(TARGETS)

View File

@@ -0,0 +1,958 @@
/*
* Copyright (c) 2020 Genexis B.V.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <stdint.h>
#include <string.h>
#include <quickjs/quickjs.h>
#include <quickjs/quickjs-libc.h>
#include <libwebsockets.h>
#define countof(x) (sizeof(x) / sizeof((x)[0]))
#define CDEF(name) JS_PROP_INT32_DEF(#name, name, JS_PROP_CONFIGURABLE)
#if LWS_LIBRARY_VERSION_NUMBER < 3002000
#define MAX_WAIT 1000
#else
#define MAX_WAIT INT32_MAX
#ifndef LWS_WITH_EXTERNAL_POLL
#error "LWS_WITH_EXTERNAL_POLL is needed for LWS versions >= 3.2.0"
#endif
#if LWS_LIBRARY_VERSION_NUMBER < 4001002
#error "External poll is broken for 3.2.0 <= LWS version < 4.1.2"
#endif
#endif
#define WSI_DATA_USE_OBJECT (1 << 0)
#define WSI_DATA_USE_LINKED (1 << 1)
typedef struct js_lws_wsi_data {
struct js_lws_wsi_data *next;
struct lws *wsi;
JSValue object;
JSValue context;
JSValue user;
uint8_t in_use;
} js_lws_wsi_data_t;
typedef struct {
struct lws_context *context;
JSContext *ctx;
JSValue callback;
js_lws_wsi_data_t *wsi_list;
} js_lws_context_data_t;
static JSClassID js_lws_context_class_id;
static JSClassID js_lws_wsi_class_id;
static void free_wsi_data_rt(JSRuntime *rt, js_lws_wsi_data_t *data)
{
JS_FreeValueRT(rt, data->object);
JS_FreeValueRT(rt, data->context);
JS_FreeValueRT(rt, data->user);
js_free_rt(rt, data);
}
static void unlink_wsi_rt(JSRuntime *rt, js_lws_context_data_t *data,
js_lws_wsi_data_t *wsi_data)
{
js_lws_wsi_data_t **p;
for (p = &data->wsi_list; *p; p = &(*p)->next) {
if (*p == wsi_data) {
*p = (*p)->next;
break;
}
}
wsi_data->next = NULL;
wsi_data->wsi = NULL;
JS_FreeValueRT(rt, wsi_data->object);
wsi_data->object = JS_UNDEFINED;
wsi_data->in_use &= ~WSI_DATA_USE_LINKED;
if (wsi_data->in_use == 0)
free_wsi_data_rt(rt, wsi_data);
}
static void unlink_wsi(JSContext *ctx, js_lws_context_data_t *data,
js_lws_wsi_data_t *wsi_data)
{
unlink_wsi_rt(JS_GetRuntime(ctx), data, wsi_data);
}
static JSValue convert_pollargs(JSContext *ctx, const struct lws_pollargs *pa)
{
JSValue obj;
if (pa == NULL)
return JS_NULL;
obj = JS_NewObject(ctx);
if (JS_IsException(obj))
return obj;
if (JS_SetPropertyStr(ctx, obj, "fd", JS_NewInt32(ctx, pa->fd)) < 0
|| JS_SetPropertyStr(ctx, obj, "events",
JS_NewInt32(ctx, pa->events)) < 0
|| JS_SetPropertyStr(ctx, obj, "prev_events",
JS_NewInt32(ctx, pa->prev_events)) < 0) {
JS_FreeValue(ctx, obj);
return JS_EXCEPTION;
}
return obj;
}
static JSValue convert_close_payload(JSContext *ctx,
uint8_t *payload, size_t len)
{
JSValue array;
uint16_t status;
JSValue reason;
if (payload == NULL || len < 2)
return JS_NULL;
array = JS_NewArray(ctx);
if (JS_IsException(array))
return array;
status = (payload[0] << 8) | payload[1];
if (JS_SetPropertyUint32(ctx, array, 0, JS_NewInt32(ctx, status)) < 0) {
JS_FreeValue(ctx, array);
return JS_EXCEPTION;
}
reason = JS_NewStringLen(ctx, (const char *)(payload + 2), len - 2);
if (JS_IsException(reason)
|| JS_SetPropertyUint32(ctx, array, 1, reason) < 0) {
JS_FreeValue(ctx, array);
return JS_EXCEPTION;
}
return array;
}
static int client_callback(struct lws *wsi, enum lws_callback_reasons reason,
void *user, void *in, size_t len)
{
js_lws_context_data_t *data = lws_context_user(lws_get_context(wsi));
js_lws_wsi_data_t *wsi_data = lws_wsi_user(wsi);
JSContext *ctx;
JSValue args[3];
JSValue ret;
int32_t ret_int;
int i;
if (data == NULL || data->ctx == NULL || JS_IsUndefined(data->callback))
return 0;
ctx = data->ctx;
args[0] = wsi_data ? JS_DupValue(ctx, wsi_data->object) : JS_NULL;
args[1] = JS_NewInt32(ctx, reason);
args[2] = JS_NULL;
switch (reason) {
case LWS_CALLBACK_ADD_POLL_FD:
case LWS_CALLBACK_DEL_POLL_FD:
case LWS_CALLBACK_CHANGE_MODE_POLL_FD:
args[2] = convert_pollargs(ctx, in);
break;
case LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
if (in)
args[2] = JS_NewStringLen(ctx, in, len);
break;
case LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
args[2] = convert_close_payload(ctx, in, len);
break;
case LWS_CALLBACK_RECEIVE:
case LWS_CALLBACK_CLIENT_RECEIVE:
if (in)
args[2] = JS_NewArrayBufferCopy(ctx, in, len);
break;
case LWS_CALLBACK_WSI_DESTROY:
if (wsi_data)
unlink_wsi(ctx, data, wsi_data);
break;
default:
break;
}
if (JS_IsException(args[2]))
ret = JS_EXCEPTION;
else
ret = JS_Call(ctx, data->callback, JS_UNDEFINED, countof(args), args);
if (JS_IsException(ret) || JS_ToInt32(ctx, &ret_int, ret) < 0) {
js_std_dump_error(ctx);
ret_int = -1;
}
JS_FreeValue(ctx, ret);
for (i = 0; i < countof(args); i++) {
JS_FreeValue(ctx, args[i]);
}
return ret_int;
}
static const struct lws_protocols client_protocols[] = {
{ "lws-client", client_callback, 0, 0, 0, NULL, 0 },
{ NULL, NULL, 0, 0, 0, NULL, 0 }
};
static JSValue js_decode_utf8(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
size_t size;
uint8_t *ptr = JS_GetArrayBuffer(ctx, &size, argv[0]);
if (ptr == NULL)
return JS_EXCEPTION;
return JS_NewStringLen(ctx, (const char *)ptr, size);
}
static JSValue js_lws_set_log_level(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
int32_t level;
if (JS_ToInt32(ctx, &level, argv[0]) < 0)
return JS_EXCEPTION;
lws_set_log_level(level, NULL);
return JS_UNDEFINED;
}
static JSValue js_lws_create_context(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
int secure;
JSValue obj;
js_lws_context_data_t *data;
struct lws_context_creation_info info;
struct lws_context *context;
if (!JS_IsFunction(ctx, argv[0]))
return JS_ThrowTypeError(ctx, "not a function");
secure = JS_ToBool(ctx, argv[1]);
if (secure < 0)
return JS_EXCEPTION;
obj = JS_NewObjectClass(ctx, js_lws_context_class_id);
if (JS_IsException(obj))
return obj;
data = js_mallocz(ctx, sizeof(js_lws_context_data_t));
if (data == NULL) {
JS_FreeValue(ctx, obj);
return JS_EXCEPTION;
}
data->callback = JS_UNDEFINED;
memset(&info, 0, sizeof(info));
info.port = CONTEXT_PORT_NO_LISTEN;
info.protocols = client_protocols;
info.gid = -1;
info.uid = -1;
info.options = secure ? LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT : 0;
info.user = data;
context = lws_create_context(&info);
if (context == NULL) {
JS_FreeValue(ctx, obj);
js_free(ctx, data);
return JS_ThrowOutOfMemory(ctx);
}
data->context = context;
data->ctx = JS_DupContext(ctx);
data->callback = JS_DupValue(ctx, argv[0]);
JS_SetOpaque(obj, data);
return obj;
}
static void js_lws_context_finalizer(JSRuntime *rt, JSValue val)
{
js_lws_context_data_t *data = JS_GetOpaque(val, js_lws_context_class_id);
if (data) {
JS_FreeContext(data->ctx);
data->ctx = NULL;
JS_FreeValueRT(rt, data->callback);
data->callback = JS_UNDEFINED;
lws_context_destroy(data->context);
while (data->wsi_list) {
unlink_wsi_rt(rt, data, data->wsi_list);
}
js_free_rt(rt, data);
}
}
static void js_lws_context_mark(JSRuntime *rt, JSValue val,
JS_MarkFunc *mark_func)
{
js_lws_context_data_t *data = JS_GetOpaque(val, js_lws_context_class_id);
if (data) {
js_lws_wsi_data_t *wd;
mark_func(rt, (JSGCObjectHeader *)data->ctx);
JS_MarkValue(rt, data->callback, mark_func);
for (wd = data->wsi_list; wd; wd = wd->next) {
JS_MarkValue(rt, wd->object, mark_func);
}
}
}
static JSValue js_lws_context_get_connections(JSContext *ctx,
JSValueConst this_val)
{
js_lws_context_data_t *data = JS_GetOpaque2(ctx, this_val,
js_lws_context_class_id);
int32_t connections = 0;
js_lws_wsi_data_t *wd;
if (data == NULL)
return JS_EXCEPTION;
for (wd = data->wsi_list; wd; wd = wd->next) {
connections++;
}
return JS_NewInt32(ctx, connections);
}
static JSValue js_lws_client_connect(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_context_data_t *data = JS_GetOpaque2(ctx, this_val,
js_lws_context_class_id);
const char *address = NULL;
int32_t port;
int secure;
const char *path = NULL, *host = NULL, *origin = NULL, *protocol = NULL;
JSValue obj = JS_UNDEFINED, ret = JS_EXCEPTION;
js_lws_wsi_data_t *wsi_data;
struct lws_client_connect_info info;
if (data == NULL)
return JS_EXCEPTION;
address = JS_ToCString(ctx, argv[0]);
if (address == NULL)
goto exception;
if (JS_ToInt32(ctx, &port, argv[1]) < 0)
goto exception;
if (port < 1 || port > 65535) {
JS_ThrowRangeError(ctx, "port must be between 1 and 65535");
goto exception;
}
secure = JS_ToBool(ctx, argv[2]);
if (secure < 0)
goto exception;
path = JS_ToCString(ctx, argv[3]);
if (path == NULL)
goto exception;
host = JS_ToCString(ctx, argv[4]);
if (host == NULL)
goto exception;
if (!JS_IsUndefined(argv[5]) && !JS_IsNull(argv[5])) {
origin = JS_ToCString(ctx, argv[5]);
if (origin == NULL)
goto exception;
}
if (!JS_IsUndefined(argv[6]) && !JS_IsNull(argv[6])) {
protocol = JS_ToCString(ctx, argv[6]);
if (protocol == NULL)
goto exception;
}
obj = JS_NewObjectClass(ctx, js_lws_wsi_class_id);
if (JS_IsException(obj))
goto exception;
wsi_data = js_mallocz(ctx, sizeof(js_lws_wsi_data_t));
if (wsi_data == NULL)
goto exception;
wsi_data->next = data->wsi_list;
wsi_data->object = JS_DupValue(ctx, obj);
wsi_data->context = JS_DupValue(ctx, this_val);
wsi_data->user = JS_DupValue(ctx, argv[7]);
wsi_data->in_use = WSI_DATA_USE_OBJECT | WSI_DATA_USE_LINKED;
data->wsi_list = wsi_data;
JS_SetOpaque(obj, wsi_data);
memset(&info, 0, sizeof(info));
info.context = data->context;
info.address = address;
info.port = port;
info.ssl_connection = secure ? LCCSCF_USE_SSL : 0;
info.local_protocol_name = "lws-client";
info.path = path;
info.host = host;
info.origin = origin;
info.protocol = protocol;
info.ietf_version_or_minus_one = -1;
info.userdata = wsi_data;
info.pwsi = &wsi_data->wsi;
lws_client_connect_via_info(&info);
if (wsi_data->wsi) {
ret = JS_DupValue(ctx, obj);
} else {
unlink_wsi(ctx, data, wsi_data);
JS_ThrowReferenceError(ctx, "cannot connect to [%s]:%d (%s)",
address, port, secure ? "wss" : "ws");
}
exception:
JS_FreeCString(ctx, address);
JS_FreeCString(ctx, path);
JS_FreeCString(ctx, host);
JS_FreeCString(ctx, origin);
JS_FreeCString(ctx, protocol);
JS_FreeValue(ctx, obj);
return ret;
}
static JSValue js_lws_service_fd(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_context_data_t *data = JS_GetOpaque2(ctx, this_val,
js_lws_context_class_id);
int32_t fd, events, revents;
struct lws_pollfd pfd;
if (data == NULL)
return JS_EXCEPTION;
if (JS_ToInt32(ctx, &fd, argv[0]) < 0)
return JS_EXCEPTION;
if (JS_ToInt32(ctx, &events, argv[1]) < 0)
return JS_EXCEPTION;
if (JS_ToInt32(ctx, &revents, argv[2]) < 0)
return JS_EXCEPTION;
pfd.fd = fd;
pfd.events = events;
pfd.revents = revents;
lws_service_fd(data->context, &pfd);
return JS_NewInt32(ctx,
lws_service_adjust_timeout(data->context, MAX_WAIT, 0));
}
static JSValue js_lws_service_periodic(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_context_data_t *data = JS_GetOpaque2(ctx, this_val,
js_lws_context_class_id);
int timeout;
if (data == NULL)
return JS_EXCEPTION;
#if LWS_LIBRARY_VERSION_NUMBER < 3002000
lws_service_fd(data->context, NULL);
#endif
timeout = lws_service_adjust_timeout(data->context, MAX_WAIT, 0);
if (timeout == 0) {
lws_service(data->context, -1);
timeout = lws_service_adjust_timeout(data->context, MAX_WAIT, 0);
}
return JS_NewInt32(ctx, timeout);
}
static void js_lws_wsi_finalizer(JSRuntime *rt, JSValue val)
{
js_lws_wsi_data_t *data = JS_GetOpaque(val, js_lws_wsi_class_id);
if (data) {
JS_FreeValueRT(rt, data->context);
data->context = JS_UNDEFINED;
JS_FreeValueRT(rt, data->user);
data->user = JS_UNDEFINED;
data->in_use &= ~WSI_DATA_USE_OBJECT;
if (data->in_use == 0)
free_wsi_data_rt(rt, data);
}
}
static void js_lws_wsi_mark(JSRuntime *rt, JSValue val,
JS_MarkFunc *mark_func)
{
js_lws_wsi_data_t *data = JS_GetOpaque(val, js_lws_wsi_class_id);
if (data) {
JS_MarkValue(rt, data->context, mark_func);
JS_MarkValue(rt, data->user, mark_func);
}
}
static JSValue js_lws_wsi_get_context(JSContext *ctx, JSValueConst this_val)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
if (data == NULL)
return JS_EXCEPTION;
return JS_DupValue(ctx, data->context);
}
static JSValue js_lws_wsi_get_user(JSContext *ctx, JSValueConst this_val)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
if (data == NULL)
return JS_EXCEPTION;
return JS_DupValue(ctx, data->user);
}
static JSValue js_lws_wsi_get_hdr(JSContext *ctx, JSValueConst this_val,
int magic)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
int len;
char *str;
JSValue ret;
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
len = lws_hdr_total_length(data->wsi, magic);
if (len < 0)
return JS_ThrowReferenceError(ctx, "HTTP headers unavailable");
len++;
str = js_mallocz(ctx, len);
if (str == NULL)
return JS_EXCEPTION;
len = lws_hdr_copy(data->wsi, str, len, magic);
if (len < 0)
ret = JS_ThrowReferenceError(ctx, "HTTP headers unavailable");
else
ret = JS_NewStringLen(ctx, str, len);
js_free(ctx, str);
return ret;
}
static JSValue js_lws_is_final_fragment(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
return JS_NewBool(ctx, lws_is_final_fragment(data->wsi));
}
static JSValue js_lws_is_first_fragment(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
return JS_NewBool(ctx, lws_is_first_fragment(data->wsi));
}
static JSValue js_lws_frame_is_binary(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
return JS_NewBool(ctx, lws_frame_is_binary(data->wsi));
}
static JSValue js_lws_callback_on_writable(JSContext *ctx,
JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
lws_callback_on_writable(data->wsi);
return JS_UNDEFINED;
}
static JSValue js_lws_write(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
const char *str = NULL;
const uint8_t *ptr;
uint8_t *buf;
size_t size;
enum lws_write_protocol protocol;
int ret;
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
if (JS_IsString(argv[0])) {
str = JS_ToCStringLen(ctx, &size, argv[0]);
if (str == NULL)
return JS_EXCEPTION;
ptr = (const uint8_t *)str;
protocol = LWS_WRITE_TEXT;
} else {
ptr = JS_GetArrayBuffer(ctx, &size, argv[0]);
if (ptr == NULL)
return JS_EXCEPTION;
protocol = LWS_WRITE_BINARY;
}
buf = js_malloc(ctx, LWS_PRE + size);
if (buf)
memcpy(buf + LWS_PRE, ptr, size);
if (str)
JS_FreeCString(ctx, str);
if (buf == NULL)
return JS_EXCEPTION;
ret = lws_write(data->wsi, buf + LWS_PRE, size, protocol);
js_free(ctx, buf);
if (ret < 0)
return JS_ThrowTypeError(ctx, "WSI not writable");
return JS_UNDEFINED;
}
static JSValue js_lws_close_reason(JSContext *ctx, JSValueConst this_val,
int argc, JSValueConst *argv)
{
js_lws_wsi_data_t *data = JS_GetOpaque2(ctx, this_val, js_lws_wsi_class_id);
int32_t status;
const char *reason = NULL;
size_t len = 0;
if (data == NULL)
return JS_EXCEPTION;
if (data->wsi == NULL)
return JS_ThrowTypeError(ctx, "defunct WSI");
if (JS_ToInt32(ctx, &status, argv[0]) < 0)
return JS_EXCEPTION;
if (status < 0 || status > 65535)
return JS_ThrowRangeError(ctx, "status must be between 0 and 65535");
if (!JS_IsUndefined(argv[1])) {
reason = JS_ToCStringLen(ctx, &len, argv[1]);
if (reason == NULL)
return JS_EXCEPTION;
if (len > 123) {
JS_FreeCString(ctx, reason);
return JS_ThrowTypeError(ctx, "reason too long (%zu > 123)", len);
}
}
lws_close_reason(data->wsi, status, (uint8_t *)reason, len);
if (reason)
JS_FreeCString(ctx, reason);
return JS_UNDEFINED;
}
static const JSCFunctionListEntry js_lws_funcs[] = {
CDEF(LLL_ERR),
CDEF(LLL_WARN),
CDEF(LLL_NOTICE),
CDEF(LLL_INFO),
CDEF(LLL_DEBUG),
CDEF(LLL_PARSER),
CDEF(LLL_HEADER),
CDEF(LLL_EXT),
CDEF(LLL_CLIENT),
CDEF(LLL_LATENCY),
CDEF(LLL_USER),
CDEF(LLL_THREAD),
CDEF(LLL_COUNT),
CDEF(LWS_CALLBACK_PROTOCOL_INIT),
CDEF(LWS_CALLBACK_PROTOCOL_DESTROY),
CDEF(LWS_CALLBACK_WSI_CREATE),
CDEF(LWS_CALLBACK_WSI_DESTROY),
CDEF(LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS),
CDEF(LWS_CALLBACK_OPENSSL_LOAD_EXTRA_SERVER_VERIFY_CERTS),
CDEF(LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION),
CDEF(LWS_CALLBACK_OPENSSL_CONTEXT_REQUIRES_PRIVATE_KEY),
CDEF(LWS_CALLBACK_SSL_INFO),
CDEF(LWS_CALLBACK_OPENSSL_PERFORM_SERVER_CERT_VERIFICATION),
CDEF(LWS_CALLBACK_SERVER_NEW_CLIENT_INSTANTIATED),
CDEF(LWS_CALLBACK_HTTP),
CDEF(LWS_CALLBACK_HTTP_BODY),
CDEF(LWS_CALLBACK_HTTP_BODY_COMPLETION),
CDEF(LWS_CALLBACK_HTTP_FILE_COMPLETION),
CDEF(LWS_CALLBACK_HTTP_WRITEABLE),
CDEF(LWS_CALLBACK_CLOSED_HTTP),
CDEF(LWS_CALLBACK_FILTER_HTTP_CONNECTION),
CDEF(LWS_CALLBACK_ADD_HEADERS),
CDEF(LWS_CALLBACK_CHECK_ACCESS_RIGHTS),
CDEF(LWS_CALLBACK_PROCESS_HTML),
CDEF(LWS_CALLBACK_HTTP_BIND_PROTOCOL),
CDEF(LWS_CALLBACK_HTTP_DROP_PROTOCOL),
CDEF(LWS_CALLBACK_HTTP_CONFIRM_UPGRADE),
CDEF(LWS_CALLBACK_ESTABLISHED_CLIENT_HTTP),
CDEF(LWS_CALLBACK_CLOSED_CLIENT_HTTP),
CDEF(LWS_CALLBACK_RECEIVE_CLIENT_HTTP_READ),
CDEF(LWS_CALLBACK_RECEIVE_CLIENT_HTTP),
CDEF(LWS_CALLBACK_COMPLETED_CLIENT_HTTP),
CDEF(LWS_CALLBACK_CLIENT_HTTP_WRITEABLE),
CDEF(LWS_CALLBACK_CLIENT_HTTP_BIND_PROTOCOL),
CDEF(LWS_CALLBACK_CLIENT_HTTP_DROP_PROTOCOL),
CDEF(LWS_CALLBACK_ESTABLISHED),
CDEF(LWS_CALLBACK_CLOSED),
CDEF(LWS_CALLBACK_SERVER_WRITEABLE),
CDEF(LWS_CALLBACK_RECEIVE),
CDEF(LWS_CALLBACK_RECEIVE_PONG),
CDEF(LWS_CALLBACK_WS_PEER_INITIATED_CLOSE),
CDEF(LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION),
CDEF(LWS_CALLBACK_CONFIRM_EXTENSION_OKAY),
CDEF(LWS_CALLBACK_WS_SERVER_BIND_PROTOCOL),
CDEF(LWS_CALLBACK_WS_SERVER_DROP_PROTOCOL),
CDEF(LWS_CALLBACK_CLIENT_CONNECTION_ERROR),
CDEF(LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH),
CDEF(LWS_CALLBACK_CLIENT_ESTABLISHED),
CDEF(LWS_CALLBACK_CLIENT_CLOSED),
CDEF(LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER),
CDEF(LWS_CALLBACK_CLIENT_RECEIVE),
CDEF(LWS_CALLBACK_CLIENT_RECEIVE_PONG),
CDEF(LWS_CALLBACK_CLIENT_WRITEABLE),
CDEF(LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED),
CDEF(LWS_CALLBACK_WS_EXT_DEFAULTS),
CDEF(LWS_CALLBACK_FILTER_NETWORK_CONNECTION),
CDEF(LWS_CALLBACK_WS_CLIENT_BIND_PROTOCOL),
CDEF(LWS_CALLBACK_WS_CLIENT_DROP_PROTOCOL),
CDEF(LWS_CALLBACK_GET_THREAD_ID),
CDEF(LWS_CALLBACK_ADD_POLL_FD),
CDEF(LWS_CALLBACK_DEL_POLL_FD),
CDEF(LWS_CALLBACK_CHANGE_MODE_POLL_FD),
CDEF(LWS_CALLBACK_LOCK_POLL),
CDEF(LWS_CALLBACK_UNLOCK_POLL),
CDEF(LWS_CALLBACK_CGI),
CDEF(LWS_CALLBACK_CGI_TERMINATED),
CDEF(LWS_CALLBACK_CGI_STDIN_DATA),
CDEF(LWS_CALLBACK_CGI_STDIN_COMPLETED),
CDEF(LWS_CALLBACK_CGI_PROCESS_ATTACH),
CDEF(LWS_CALLBACK_SESSION_INFO),
CDEF(LWS_CALLBACK_GS_EVENT),
CDEF(LWS_CALLBACK_HTTP_PMO),
CDEF(LWS_CALLBACK_RAW_RX),
CDEF(LWS_CALLBACK_RAW_CLOSE),
CDEF(LWS_CALLBACK_RAW_WRITEABLE),
CDEF(LWS_CALLBACK_RAW_ADOPT),
CDEF(LWS_CALLBACK_RAW_SKT_BIND_PROTOCOL),
CDEF(LWS_CALLBACK_RAW_SKT_DROP_PROTOCOL),
CDEF(LWS_CALLBACK_RAW_ADOPT_FILE),
CDEF(LWS_CALLBACK_RAW_RX_FILE),
CDEF(LWS_CALLBACK_RAW_WRITEABLE_FILE),
CDEF(LWS_CALLBACK_RAW_CLOSE_FILE),
CDEF(LWS_CALLBACK_RAW_FILE_BIND_PROTOCOL),
CDEF(LWS_CALLBACK_RAW_FILE_DROP_PROTOCOL),
CDEF(LWS_CALLBACK_TIMER),
CDEF(LWS_CALLBACK_EVENT_WAIT_CANCELLED),
CDEF(LWS_CALLBACK_CHILD_CLOSING),
CDEF(LWS_CALLBACK_VHOST_CERT_AGING),
CDEF(LWS_CALLBACK_VHOST_CERT_UPDATE),
CDEF(LWS_CALLBACK_USER),
CDEF(LWS_POLLHUP),
CDEF(LWS_POLLIN),
CDEF(LWS_POLLOUT),
JS_CFUNC_DEF("decode_utf8", 1, js_decode_utf8),
JS_CFUNC_DEF("set_log_level", 1, js_lws_set_log_level),
JS_CFUNC_DEF("create_context", 2, js_lws_create_context),
};
static const JSClassDef js_lws_context_class = {
"Context",
.finalizer = js_lws_context_finalizer,
.gc_mark = js_lws_context_mark,
};
static const JSCFunctionListEntry js_lws_context_proto_funcs[] = {
JS_CGETSET_DEF("connections", js_lws_context_get_connections, NULL),
JS_CFUNC_DEF("client_connect", 8, js_lws_client_connect),
JS_CFUNC_DEF("service_fd", 3, js_lws_service_fd),
JS_CFUNC_DEF("service_periodic", 0, js_lws_service_periodic),
};
static const JSClassDef js_lws_wsi_class = {
"WSI",
.finalizer = js_lws_wsi_finalizer,
.gc_mark = js_lws_wsi_mark,
};
#define HDRGET(name) JS_CGETSET_MAGIC_DEF(#name, js_lws_wsi_get_hdr, NULL, name)
static const JSCFunctionListEntry js_lws_wsi_proto_funcs[] = {
JS_CGETSET_DEF("context", js_lws_wsi_get_context, NULL),
JS_CGETSET_DEF("user", js_lws_wsi_get_user, NULL),
HDRGET(WSI_TOKEN_GET_URI),
HDRGET(WSI_TOKEN_POST_URI),
HDRGET(WSI_TOKEN_OPTIONS_URI),
HDRGET(WSI_TOKEN_HOST),
HDRGET(WSI_TOKEN_CONNECTION),
HDRGET(WSI_TOKEN_UPGRADE),
HDRGET(WSI_TOKEN_ORIGIN),
HDRGET(WSI_TOKEN_DRAFT),
HDRGET(WSI_TOKEN_CHALLENGE),
HDRGET(WSI_TOKEN_EXTENSIONS),
HDRGET(WSI_TOKEN_KEY1),
HDRGET(WSI_TOKEN_KEY2),
HDRGET(WSI_TOKEN_PROTOCOL),
HDRGET(WSI_TOKEN_ACCEPT),
HDRGET(WSI_TOKEN_NONCE),
HDRGET(WSI_TOKEN_HTTP),
HDRGET(WSI_TOKEN_HTTP2_SETTINGS),
HDRGET(WSI_TOKEN_HTTP_ACCEPT),
HDRGET(WSI_TOKEN_HTTP_AC_REQUEST_HEADERS),
HDRGET(WSI_TOKEN_HTTP_IF_MODIFIED_SINCE),
HDRGET(WSI_TOKEN_HTTP_IF_NONE_MATCH),
HDRGET(WSI_TOKEN_HTTP_ACCEPT_ENCODING),
HDRGET(WSI_TOKEN_HTTP_ACCEPT_LANGUAGE),
HDRGET(WSI_TOKEN_HTTP_PRAGMA),
HDRGET(WSI_TOKEN_HTTP_CACHE_CONTROL),
HDRGET(WSI_TOKEN_HTTP_AUTHORIZATION),
HDRGET(WSI_TOKEN_HTTP_COOKIE),
HDRGET(WSI_TOKEN_HTTP_CONTENT_LENGTH),
HDRGET(WSI_TOKEN_HTTP_CONTENT_TYPE),
HDRGET(WSI_TOKEN_HTTP_DATE),
HDRGET(WSI_TOKEN_HTTP_RANGE),
HDRGET(WSI_TOKEN_HTTP_REFERER),
HDRGET(WSI_TOKEN_KEY),
HDRGET(WSI_TOKEN_VERSION),
HDRGET(WSI_TOKEN_SWORIGIN),
HDRGET(WSI_TOKEN_HTTP_COLON_AUTHORITY),
HDRGET(WSI_TOKEN_HTTP_COLON_METHOD),
HDRGET(WSI_TOKEN_HTTP_COLON_PATH),
HDRGET(WSI_TOKEN_HTTP_COLON_SCHEME),
HDRGET(WSI_TOKEN_HTTP_COLON_STATUS),
HDRGET(WSI_TOKEN_HTTP_ACCEPT_CHARSET),
HDRGET(WSI_TOKEN_HTTP_ACCEPT_RANGES),
HDRGET(WSI_TOKEN_HTTP_ACCESS_CONTROL_ALLOW_ORIGIN),
HDRGET(WSI_TOKEN_HTTP_AGE),
HDRGET(WSI_TOKEN_HTTP_ALLOW),
HDRGET(WSI_TOKEN_HTTP_CONTENT_DISPOSITION),
HDRGET(WSI_TOKEN_HTTP_CONTENT_ENCODING),
HDRGET(WSI_TOKEN_HTTP_CONTENT_LANGUAGE),
HDRGET(WSI_TOKEN_HTTP_CONTENT_LOCATION),
HDRGET(WSI_TOKEN_HTTP_CONTENT_RANGE),
HDRGET(WSI_TOKEN_HTTP_ETAG),
HDRGET(WSI_TOKEN_HTTP_EXPECT),
HDRGET(WSI_TOKEN_HTTP_EXPIRES),
HDRGET(WSI_TOKEN_HTTP_FROM),
HDRGET(WSI_TOKEN_HTTP_IF_MATCH),
HDRGET(WSI_TOKEN_HTTP_IF_RANGE),
HDRGET(WSI_TOKEN_HTTP_IF_UNMODIFIED_SINCE),
HDRGET(WSI_TOKEN_HTTP_LAST_MODIFIED),
HDRGET(WSI_TOKEN_HTTP_LINK),
HDRGET(WSI_TOKEN_HTTP_LOCATION),
HDRGET(WSI_TOKEN_HTTP_MAX_FORWARDS),
HDRGET(WSI_TOKEN_HTTP_PROXY_AUTHENTICATE),
HDRGET(WSI_TOKEN_HTTP_PROXY_AUTHORIZATION),
HDRGET(WSI_TOKEN_HTTP_REFRESH),
HDRGET(WSI_TOKEN_HTTP_RETRY_AFTER),
HDRGET(WSI_TOKEN_HTTP_SERVER),
HDRGET(WSI_TOKEN_HTTP_SET_COOKIE),
HDRGET(WSI_TOKEN_HTTP_STRICT_TRANSPORT_SECURITY),
HDRGET(WSI_TOKEN_HTTP_TRANSFER_ENCODING),
HDRGET(WSI_TOKEN_HTTP_USER_AGENT),
HDRGET(WSI_TOKEN_HTTP_VARY),
HDRGET(WSI_TOKEN_HTTP_VIA),
HDRGET(WSI_TOKEN_HTTP_WWW_AUTHENTICATE),
HDRGET(WSI_TOKEN_PATCH_URI),
HDRGET(WSI_TOKEN_PUT_URI),
HDRGET(WSI_TOKEN_DELETE_URI),
HDRGET(WSI_TOKEN_HTTP_URI_ARGS),
HDRGET(WSI_TOKEN_PROXY),
HDRGET(WSI_TOKEN_HTTP_X_REAL_IP),
HDRGET(WSI_TOKEN_HTTP1_0),
HDRGET(WSI_TOKEN_X_FORWARDED_FOR),
HDRGET(WSI_TOKEN_CONNECT),
HDRGET(WSI_TOKEN_HEAD_URI),
HDRGET(WSI_TOKEN_TE),
HDRGET(WSI_TOKEN_REPLAY_NONCE),
HDRGET(WSI_TOKEN_COLON_PROTOCOL),
HDRGET(WSI_TOKEN_X_AUTH_TOKEN),
JS_CFUNC_DEF("is_final_fragment", 0, js_lws_is_final_fragment),
JS_CFUNC_DEF("is_first_fragment", 0, js_lws_is_first_fragment),
JS_CFUNC_DEF("frame_is_binary", 0, js_lws_frame_is_binary),
JS_CFUNC_DEF("callback_on_writable", 0, js_lws_callback_on_writable),
JS_CFUNC_DEF("write", 1, js_lws_write),
JS_CFUNC_DEF("close_reason", 2, js_lws_close_reason),
};
static int js_lws_init(JSContext *ctx, JSModuleDef *m)
{
JSValue proto;
JS_NewClassID(&js_lws_context_class_id);
JS_NewClass(JS_GetRuntime(ctx), js_lws_context_class_id,
&js_lws_context_class);
proto = JS_NewObject(ctx);
JS_SetPropertyFunctionList(ctx, proto, js_lws_context_proto_funcs,
countof(js_lws_context_proto_funcs));
JS_SetClassProto(ctx, js_lws_context_class_id, proto);
JS_NewClassID(&js_lws_wsi_class_id);
JS_NewClass(JS_GetRuntime(ctx), js_lws_wsi_class_id, &js_lws_wsi_class);
proto = JS_NewObject(ctx);
JS_SetPropertyFunctionList(ctx, proto, js_lws_wsi_proto_funcs,
countof(js_lws_wsi_proto_funcs));
JS_SetClassProto(ctx, js_lws_wsi_class_id, proto);
return JS_SetModuleExportList(ctx, m, js_lws_funcs, countof(js_lws_funcs));
}
JSModuleDef *js_init_module(JSContext *ctx, const char *module_name)
{
JSModuleDef *m = JS_NewCModule(ctx, module_name, js_lws_init);
if (m == NULL)
return NULL;
JS_AddModuleExportList(ctx, m, js_lws_funcs, countof(js_lws_funcs));
return m;
}

View File

@@ -0,0 +1,415 @@
/*
* Copyright (c) 2020 Genexis B.V.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import * as os from 'os'
import * as lws from './lws-client.so'
const CONNECTING = 0
const OPEN = 1
const CLOSING = 2
const CLOSED = 3
const CLOSING1 = 0x10 | CLOSING
const CLOSING2 = 0x20 | CLOSING
function serviceScheduler (context) {
let running = false
let timeout = null
function schedule (time) {
if (timeout) os.clearTimeout(timeout)
timeout = running ? os.setTimeout(callback, time) : null
}
function callback () {
schedule(context.service_periodic())
}
return {
start: function () {
running = true
schedule(0)
},
stop: function () {
running = false
schedule(0)
},
reschedule: schedule
}
}
function fdHandler (fd, events, revents) {
return function () {
service.reschedule(context.service_fd(fd, events, revents))
}
}
function contextCallback (wsi, reason, arg) {
switch (reason) {
case lws.LWS_CALLBACK_ADD_POLL_FD:
service.start()
// fallthrough
case lws.LWS_CALLBACK_CHANGE_MODE_POLL_FD:
os.setReadHandler(
arg.fd,
(arg.events & lws.LWS_POLLIN)
? fdHandler(arg.fd, arg.events, lws.LWS_POLLIN)
: null
)
os.setWriteHandler(
arg.fd,
(arg.events & lws.LWS_POLLOUT)
? fdHandler(arg.fd, arg.events, lws.LWS_POLLOUT)
: null
)
break
case lws.LWS_CALLBACK_DEL_POLL_FD:
os.setReadHandler(arg.fd, null)
os.setWriteHandler(arg.fd, null)
break
case lws.LWS_CALLBACK_CLIENT_CONNECTION_ERROR:
wsi.user.error(typeof arg === 'string' ? arg : '')
break
case lws.LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH:
if (wsi.user.readyState !== CONNECTING) {
return -1
}
wsi.user.protocol = wsi.WSI_TOKEN_PROTOCOL
wsi.user.extensions = wsi.WSI_TOKEN_EXTENSIONS
break
case lws.LWS_CALLBACK_CLIENT_ESTABLISHED:
if (wsi.user.readyState !== CONNECTING) {
return -1
}
wsi.user.wsi = wsi
wsi.user.open()
break
case lws.LWS_CALLBACK_WS_PEER_INITIATED_CLOSE:
if (wsi.user.readyState === CLOSED) {
return -1
}
if (arg instanceof Array) {
wsi.user.closeEvent.code = arg[0]
wsi.user.closeEvent.reason = arg[1]
} else {
wsi.user.closeEvent.code = 1005
wsi.user.closeEvent.reason = ''
}
wsi.user.readyState = CLOSING2
break
case lws.LWS_CALLBACK_CLIENT_CLOSED:
wsi.user.close()
break
case lws.LWS_CALLBACK_CLIENT_RECEIVE:
if (!(arg instanceof ArrayBuffer) ||
wsi.user.readyState === CONNECTING ||
wsi.user.readyState === CLOSED) {
return -1
}
if (wsi.is_first_fragment()) {
wsi.user.inbuf = []
}
wsi.user.inbuf.push(arg)
if (wsi.is_final_fragment()) {
wsi.user.message(wsi.frame_is_binary())
}
break
case lws.LWS_CALLBACK_CLIENT_WRITEABLE:
if ((wsi.user.readyState === OPEN || wsi.user.readyState === CLOSING1) &&
wsi.user.outbuf.length > 0) {
const msg = wsi.user.outbuf.shift()
if (msg === null) {
wsi.user.readyState = CLOSING2
return -1
}
wsi.write(msg)
if (wsi.user.outbuf.length > 0) {
wsi.callback_on_writable()
}
}
break
case lws.LWS_CALLBACK_WSI_DESTROY:
if (wsi.context.connections === 0) service.stop()
break
}
return 0
}
lws.set_log_level(lws.LLL_ERR | lws.LLL_WARN)
const context = lws.create_context(contextCallback, true)
const service = serviceScheduler(context)
function arrayBufferJoin (bufs) {
if (!(bufs instanceof Array)) {
throw new TypeError('Array expected')
}
if (!bufs.every(function (val) { return val instanceof ArrayBuffer })) {
throw new TypeError('ArrayBuffer expected')
}
const len = bufs.reduce(function (acc, val) {
return acc + val.byteLength
}, 0)
const array = new Uint8Array(len)
let offset = 0
for (const b of bufs) {
array.set(new Uint8Array(b), offset)
offset += b.byteLength
}
return array.buffer
}
export function WebSocket (url, protocols) {
const pattern = /^(ws|wss):\/\/([^/?#]*)([^#]*)$/i
const match = pattern.exec(url)
if (match === null) {
throw new TypeError('invalid WebSocket URL')
}
const secure = match[1].toLowerCase() === 'wss'
const host = match[2]
const path = match[3].startsWith('/') ? match[3] : '/' + match[3]
const hostPattern = /^(?:([a-z\d.-]+)|\[([\da-f:]+:[\da-f.]*)\])(?::(\d*))?$/i
const hostMatch = hostPattern.exec(host)
if (hostMatch === null) {
throw new TypeError('invalid WebSocket URL')
}
const address = hostMatch[1] || hostMatch[2]
const port = hostMatch[3] ? parseInt(hostMatch[3]) : (secure ? 443 : 80)
const validPath = /^\/[A-Za-z0-9_.!~*'()%:@&=+$,;/?-]*$/
if (!validPath.test(path)) {
throw new TypeError('invalid WebSocket URL')
}
if (!(port >= 1 && port <= 65535)) {
throw new RangeError('port must be between 1 and 65535')
}
if (protocols === undefined) {
protocols = []
} else if (!(protocols instanceof Array)) {
protocols = [protocols]
}
const validProto = /^[A-Za-z0-9!#$%&'*+.^_|~-]+$/
if (!protocols.every(function (val) { return validProto.test(val) })) {
throw new TypeError('invalid WebSocket subprotocol name')
}
const proto = protocols.length > 0 ? protocols.join(', ') : null
const self = this
const state = {
url: url,
readyState: CONNECTING,
extensions: '',
protocol: '',
onopen: null,
onerror: null,
onclose: null,
onmessage: null,
wsi: null,
inbuf: [],
outbuf: [],
closeEvent: {
type: 'close',
code: 1005,
reason: '',
wasClean: false
},
open: function () {
if (state.readyState === CONNECTING) {
state.readyState = OPEN
if (state.onopen) {
state.onopen.call(self, { type: 'open' })
}
}
},
error: function (e) {
if (state.readyState !== CLOSED) {
state.closeEvent.code = 1006
state.closeEvent.reason = String(e)
state.readyState = CLOSED
try {
if (state.onerror) {
state.onerror.call(self, { type: 'error' })
}
} finally {
if (state.onclose) {
state.onclose.call(self, Object.assign({}, state.closeEvent))
}
}
}
},
close: function () {
if (state.readyState !== CLOSED) {
state.closeEvent.wasClean = true
state.readyState = CLOSED
if (state.onclose) {
state.onclose.call(self, Object.assign({}, state.closeEvent))
}
}
},
message: function (binary) {
if (state.inbuf.length > 0) {
const msg = state.inbuf.length === 1
? state.inbuf[0]
: arrayBufferJoin(state.inbuf)
state.inbuf = []
if (state.readyState === OPEN && state.onmessage) {
state.onmessage.call(self, {
type: 'messasge',
data: binary ? msg : lws.decode_utf8(msg)
})
}
}
}
}
this._wsState = state
os.setTimeout(function () {
try {
context.client_connect(
address, port, secure, path, host, null, proto, state
)
} catch (e) {
state.error(e)
}
}, 0)
}
const readyStateConstants = {
CONNECTING: { value: CONNECTING },
OPEN: { value: OPEN },
CLOSING: { value: CLOSING },
CLOSED: { value: CLOSED }
}
Object.defineProperties(WebSocket, readyStateConstants)
Object.defineProperties(WebSocket.prototype, readyStateConstants)
function checkNullOrFunction (val) {
if (val !== null && typeof val !== 'function') {
throw new TypeError('null or Function expected')
}
}
Object.defineProperties(WebSocket.prototype, {
url: { get: function () { return this._wsState.url } },
readyState: { get: function () { return this._wsState.readyState & 0xf } },
extensions: { get: function () { return this._wsState.extensions } },
protocol: { get: function () { return this._wsState.protocol } },
bufferedAmount: {
get: function () {
return this._wsState.outbuf.reduce(function (acc, val) {
if (val instanceof ArrayBuffer) {
acc += val.byteLength
} else if (typeof val === 'string') {
acc += val.length
}
return acc
}, 0)
}
},
binaryType: {
get: function () { return 'arraybuffer' },
set: function (val) {
if (val !== 'arraybuffer') {
throw new TypeError('only "arraybuffer" allowed for "binaryType"')
}
}
},
onopen: {
get: function () { return this._wsState.onopen },
set: function (val) {
checkNullOrFunction(val)
this._wsState.onopen = val
}
},
onerror: {
get: function () { return this._wsState.onerror },
set: function (val) {
checkNullOrFunction(val)
this._wsState.onerror = val
}
},
onclose: {
get: function () { return this._wsState.onclose },
set: function (val) {
checkNullOrFunction(val)
this._wsState.onclose = val
}
},
onmessage: {
get: function () { return this._wsState.onmessage },
set: function (val) {
checkNullOrFunction(val)
this._wsState.onmessage = val
}
}
})
WebSocket.prototype.close = function (code, reason) {
if (code !== undefined) {
code = Math.trunc(code)
reason = reason === undefined ? '' : String(reason)
if (code !== 1000 && !(code >= 3000 && code <= 4999)) {
throw new RangeError('code must be 1000 or between 3000 and 4999')
}
}
const state = this._wsState
if (state.readyState === OPEN) {
if (code !== undefined) {
state.wsi.close_reason(code, reason)
state.closeEvent.code = code
state.closeEvent.reason = reason
}
state.readyState = CLOSING1
state.outbuf.push(null)
state.wsi.callback_on_writable()
} else if (state.readyState === CONNECTING) {
state.readyState = CLOSING2
}
}
WebSocket.prototype.send = function (msg) {
const state = this._wsState
if (state.readyState === CONNECTING) {
throw new TypeError('send() not allowed in CONNECTING state')
}
if (msg instanceof ArrayBuffer) {
state.outbuf.push(msg.slice(0))
} else if (ArrayBuffer.isView(msg)) {
state.outbuf.push(
msg.buffer.slice(msg.byteOffset, msg.byteOffset + msg.byteLength)
)
} else {
state.outbuf.push(String(msg))
}
if (state.readyState === OPEN) {
state.wsi.callback_on_writable()
}
}

55
quickjs/Makefile Normal file
View File

@@ -0,0 +1,55 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=quickjs
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/bellard/quickjs.git
PKG_SOURCE_DATE:=2020-11-08
PKG_SOURCE_VERSION:=204682fb87ab9312f0cf81f959ecd181180457bc
PKG_MIRROR_HASH:=skip
PKG_LICENSE:=MIT
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
define Package/quickjs
SECTION:=lang
CATEGORY:=Languages
TITLE:=QuickJS Javascript engine
URL:=https://bellard.org/quickjs/
MAINTAINER:=Erik Karlsson <erik.karlsson@genexis.eu>
DEPENDS:=+libatomic
endef
define Package/quickjs/description
QuickJS is a small and embeddable Javascript engine. It supports
the ES2020 specification including modules, asynchronous
generators, proxies and BigInt.
endef
MAKE_VARS += \
LIBS="-latomic"
MAKE_FLAGS = \
prefix=/usr \
CONFIG_SMALL=y \
CROSS_PREFIX="$(TARGET_CROSS)"
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/lib/quickjs
$(CP) $(PKG_INSTALL_DIR)/usr/lib/quickjs/libquickjs.a $(1)/usr/lib/quickjs/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/quickjs/libquickjs.lto.a $(1)/usr/lib/quickjs/
$(INSTALL_DIR) $(1)/usr/include/quickjs
$(CP) $(PKG_INSTALL_DIR)/usr/include/quickjs/quickjs.h $(1)/usr/include/quickjs/
$(CP) $(PKG_INSTALL_DIR)/usr/include/quickjs/quickjs-libc.h $(1)/usr/include/quickjs/
endef
define Package/quickjs/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/qjs $(1)/usr/bin/
endef
$(eval $(call BuildPackage,quickjs))

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