mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-01 02:48:18 +00:00
ucentral: various updates and fixes
* Gateway and client are now talking jsonrpc on the wire. * update the datamodel to the latest version. * add github workflow * add zero touch on-boarding Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
37
.github/workflows/build-dev.yml
vendored
Normal file
37
.github/workflows/build-dev.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Build OpenWrt with OpenSync
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ uCentral-* ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: ['e8450', 'ea8300', 'wf194c', 'zyxel_gs1900-10hp', 'edgecore_ecs4100-12ph']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Build image for ${{ matrix.target }}
|
||||||
|
id: build
|
||||||
|
run: |
|
||||||
|
git config --global user.email "you@example.com"
|
||||||
|
git config --global user.name "Your Name"
|
||||||
|
make -j TARGET=${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Package and upload image for ${{ matrix.target }}
|
||||||
|
env:
|
||||||
|
GH_BUILD_USERNAME: ${{ secrets.GH_BUILD_USERNAME }}
|
||||||
|
GH_BUILD_PASSWORD: ${{ secrets.GH_BUILD_PASSWORD }}
|
||||||
|
ARTIFACTORY_USERNAME: cicd-indoor-main
|
||||||
|
ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
LOWERCASE_TARGET=`echo ${{ matrix.target }} | tr '[:upper:]' '[:lower:]'`
|
||||||
|
TAR_NAME="$LOWERCASE_TARGET-$BRANCH.tar.gz"
|
||||||
|
ls openwrt/bin/targets/
|
||||||
|
tar cfz "$TAR_NAME" -C openwrt/bin/targets/ .
|
||||||
|
curl -u $GH_BUILD_USERNAME:$GH_BUILD_USERNAME -T "$TAR_NAME" "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/$LOWERCASE_TARGET/uCentral/dev/"$TAR_NAME""
|
||||||
20
README.md
Normal file
20
README.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Setting up your build machine
|
||||||
|
|
||||||
|
Requires a recent linux installation. Older systems without python 3.7 will have trouble. See this link for details: https://openwrt.org/docs/guide-developer/quickstart-build-images
|
||||||
|
|
||||||
|
Install build packages: sudo apt install build-essential libncurses5-dev gawk git libssl-dev gettext zlib1g-dev swig unzip time rsync python3 python3-setuptools python3-yaml.
|
||||||
|
|
||||||
|
# Doing a native build on Linux
|
||||||
|
First we need to clone and setup our tree. This will result in an openwrt/.
|
||||||
|
```
|
||||||
|
python3 setup.py --setup
|
||||||
|
```
|
||||||
|
Next we need to select the profile and base package selection. This setup will install the feeds, packages and generate the .config file.
|
||||||
|
```
|
||||||
|
cd openwrt
|
||||||
|
./scripts/gen_config.py ea8300 ucentral-ap wifi
|
||||||
|
```
|
||||||
|
Finally we can build the tree.
|
||||||
|
```
|
||||||
|
make -j X V=s
|
||||||
|
```
|
||||||
15
build.sh
15
build.sh
@@ -7,7 +7,6 @@ TARGET=${1}
|
|||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo "Error: please specify TARGET"
|
echo "Error: please specify TARGET"
|
||||||
echo "One of: WF194C, ZYXEL_GS1900-10HP"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -19,20 +18,8 @@ else
|
|||||||
echo "### OpenWrt repo already setup"
|
echo "### OpenWrt repo already setup"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "${TARGET}" in
|
|
||||||
WF194C)
|
|
||||||
TARGET=wf194c
|
|
||||||
;;
|
|
||||||
ZYXEL_GS1900-10HP)
|
|
||||||
TARGET=zyxel_gs1900-10hp
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "${TARGET} is unknown"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
cd ${BUILD_DIR}
|
cd ${BUILD_DIR}
|
||||||
./scripts/gen_config.py ${TARGET} ucentral-ap || exit 1
|
./scripts/gen_config.py ${TARGET} || exit 1
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
echo "### Building image ..."
|
echo "### Building image ..."
|
||||||
|
|||||||
25
feeds/tip/firstcontact/Makefile
Normal file
25
feeds/tip/firstcontact/Makefile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=firstcontact
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include $(INCLUDE_DIR)/cmake.mk
|
||||||
|
|
||||||
|
define Package/firstcontact
|
||||||
|
SECTION:=ucentral
|
||||||
|
CATEGORY:=uCentral
|
||||||
|
TITLE:=TIP DigiCert firstcontact
|
||||||
|
DEPENDS:=+libubox +libcurl +libopenssl
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/firstcontact/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/firstcontact $(1)/usr/sbin/
|
||||||
|
$(CP) ./files/* $(1)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,firstcontact))
|
||||||
13
feeds/tip/firstcontact/files/etc/init.d/firstcontact
Executable file
13
feeds/tip/firstcontact/files/etc/init.d/firstcontact
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=99
|
||||||
|
|
||||||
|
USE_PROCD=1
|
||||||
|
PROG=/usr/bin/ucode
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
procd_open_instance
|
||||||
|
procd_set_param command "$PROG" -m uci -m fs -i /usr/share/ucentral/firstcontact.uc
|
||||||
|
procd_set_param respawn 1 60 0
|
||||||
|
procd_close_instance
|
||||||
|
}
|
||||||
2
feeds/tip/firstcontact/files/etc/uci-defaults/zzz-firstcontact
Executable file
2
feeds/tip/firstcontact/files/etc/uci-defaults/zzz-firstcontact
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
/etc/init.d/ucentral disable
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
{%
|
||||||
|
let devid;
|
||||||
|
let fd = fs.open("/etc/ucentral/dev-id", "r");
|
||||||
|
if (!fd) {
|
||||||
|
warn("firstcontact: failed to find device id");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
devid = fd.read("all");
|
||||||
|
fd.close();
|
||||||
|
|
||||||
|
ret = system(sprintf('/usr/sbin/firstcontact -i %s', devid));
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
warn("firstcontact failed to contact redirector\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let redirector = { };
|
||||||
|
let fd = fs.open("/etc/ucentral/redirector.json", "r");
|
||||||
|
if (fd) {
|
||||||
|
let data = fd.read("all");
|
||||||
|
fd.close();
|
||||||
|
|
||||||
|
try {
|
||||||
|
redirector = json(data);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
warn("firstcontact: Unable to parse JSON data in %s: %s", path, e);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let config = {};
|
||||||
|
|
||||||
|
for (let r in redirector.fields)
|
||||||
|
if (r.name && r.value)
|
||||||
|
config[r.name] = r.value;
|
||||||
|
if (!config.Redirector) {
|
||||||
|
warn("Reply is missing Redirector field\n");
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
let cursor = uci.cursor("/etc/config-shadow/");
|
||||||
|
cursor.load("ucentral");
|
||||||
|
cursor.set("ucentral", "config", "server", config.Redirector);
|
||||||
|
cursor.set("ucentral", "config", "serial", devid);
|
||||||
|
cursor.commit();
|
||||||
|
|
||||||
|
warn("firstcontact: managed to look up redirector\n");
|
||||||
|
|
||||||
|
system("/etc/init.d/ucentral enable");
|
||||||
|
system("/etc/init.d/ucentral restart");
|
||||||
|
|
||||||
|
system("/etc/init.d/firstcontact disable");
|
||||||
|
system("/etc/init.d/firstcontact stop");
|
||||||
|
%}
|
||||||
13
feeds/tip/firstcontact/src/CMakeLists.txt
Normal file
13
feeds/tip/firstcontact/src/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
|
||||||
|
PROJECT(firstcontact C)
|
||||||
|
INCLUDE(GNUInstallDirs)
|
||||||
|
ADD_DEFINITIONS(-Os -ggdb -Wall -Werror --std=gnu99 -Wmissing-declarations)
|
||||||
|
|
||||||
|
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(firstcontact firstcontact.c)
|
||||||
|
TARGET_LINK_LIBRARIES(firstcontact curl crypto ssl ubox)
|
||||||
|
INSTALL(TARGETS firstcontact
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
|
||||||
|
)
|
||||||
100
feeds/tip/firstcontact/src/firstcontact.c
Normal file
100
feeds/tip/firstcontact/src/firstcontact.c
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
#include <libubox/ulog.h>
|
||||||
|
|
||||||
|
static const char *file_cert = "/etc/ucentral/cert.pem";
|
||||||
|
static const char *file_key = "/etc/ucentral/cert.key";
|
||||||
|
static const char *file_json = "/etc/ucentral/redirector.json";
|
||||||
|
static const char *file_dbg = "/tmp/firstcontact.hdr";
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
FILE *fp_json;
|
||||||
|
FILE *fp_dbg;
|
||||||
|
CURLcode res;
|
||||||
|
CURL *curl;
|
||||||
|
char *devid = NULL;
|
||||||
|
char *url;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
int option = getopt(argc, argv, "k:c:o:hi:");
|
||||||
|
|
||||||
|
if (option == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
switch (option) {
|
||||||
|
case 'k':
|
||||||
|
file_key = optarg;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
file_cert = optarg;
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
file_json = optarg;
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
devid = optarg;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 'h':
|
||||||
|
printf("Usage: firstcontact OPTIONS\n"
|
||||||
|
" -k <keyfile>\n"
|
||||||
|
" -c <certfile>\n"
|
||||||
|
" -o <outfile>\n"
|
||||||
|
" -i <devid>\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!devid) {
|
||||||
|
fprintf(stderr, "missing devid\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ulog_open(ULOG_SYSLOG | ULOG_STDIO, LOG_DAEMON, "firstcontact");
|
||||||
|
ULOG_INFO("attempting first contact\n");
|
||||||
|
|
||||||
|
fp_dbg = fopen(file_dbg, "wb");
|
||||||
|
fp_json = fopen(file_json, "wb");
|
||||||
|
if (!fp_json) {
|
||||||
|
ULOG_ERR("failed to create %s\n", file_json);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if (!curl) {
|
||||||
|
ULOG_ERR("curl_easy_init failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (asprintf(&url, "https://clientauth.demo.one.digicert.com/iot/api/v2/device/%s", devid) < 0) {
|
||||||
|
ULOG_ERR("failed to assemble url\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp_json);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp_dbg);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SSLCERT, file_cert);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SSLKEY, file_key);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
|
||||||
|
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
if (res != CURLE_OK)
|
||||||
|
ULOG_ERR("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
||||||
|
else
|
||||||
|
ULOG_INFO("downloaded first contact data\n");
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
curl_global_cleanup();
|
||||||
|
|
||||||
|
ulog_close();
|
||||||
|
|
||||||
|
return (res != CURLE_OK);
|
||||||
|
}
|
||||||
@@ -14,7 +14,9 @@ validate_rtty_section() {
|
|||||||
'port:port' \
|
'port:port' \
|
||||||
'ssl:bool:0' \
|
'ssl:bool:0' \
|
||||||
'token:maxlength(32)' \
|
'token:maxlength(32)' \
|
||||||
'verbose:bool:0'
|
'verbose:bool:0' \
|
||||||
|
'enable:bool:0' \
|
||||||
|
'interval:uinteger:0'
|
||||||
}
|
}
|
||||||
|
|
||||||
start_rtty() {
|
start_rtty() {
|
||||||
@@ -27,6 +29,8 @@ start_rtty() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ $enable -eq 0 -a $interval -eq 0 ] && return 1
|
||||||
|
|
||||||
[ -n "$interface" ] && network_get_device ifname "$interface"
|
[ -n "$interface" ] && network_get_device ifname "$interface"
|
||||||
|
|
||||||
[ -z "$ifname" -a -z "$id" ] && {
|
[ -z "$ifname" -a -z "$id" ] && {
|
||||||
@@ -50,7 +54,8 @@ start_rtty() {
|
|||||||
[ "$ssl" = "1" ] && procd_append_param command -s
|
[ "$ssl" = "1" ] && procd_append_param command -s
|
||||||
[ -n "$token" ] && procd_append_param command -t "$token"
|
[ -n "$token" ] && procd_append_param command -t "$token"
|
||||||
[ "$verbose" = "1" ] && procd_append_param command -v
|
[ "$verbose" = "1" ] && procd_append_param command -v
|
||||||
procd_set_param respawn
|
[ "$interval" -eq "0" ] || procd_append_param command -e $interval
|
||||||
|
[ "$interval" -eq "0" ] && procd_set_param respawn
|
||||||
procd_close_instance
|
procd_close_instance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
68
feeds/ucentral/rtty/patches/100-max_timeout.patch
Normal file
68
feeds/ucentral/rtty/patches/100-max_timeout.patch
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
Index: rtty-7.1.4/src/main.c
|
||||||
|
===================================================================
|
||||||
|
--- rtty-7.1.4.orig/src/main.c
|
||||||
|
+++ rtty-7.1.4/src/main.c
|
||||||
|
@@ -37,6 +37,8 @@ enum {
|
||||||
|
LONG_OPT_HELP = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
+static int force_exit;
|
||||||
|
+
|
||||||
|
static void signal_cb(struct ev_loop *loop, ev_signal *w, int revents)
|
||||||
|
{
|
||||||
|
if (w->signum == SIGINT) {
|
||||||
|
@@ -53,6 +55,7 @@ static struct option long_options[] = {
|
||||||
|
{"token", required_argument, NULL, 't'},
|
||||||
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
|
{"version", no_argument, NULL, 'V'},
|
||||||
|
+ {"exit", required_argument, NULL, 'V'},
|
||||||
|
{"help", no_argument, NULL, LONG_OPT_HELP},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
@@ -79,10 +82,16 @@ static void usage(const char *prog)
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void timeout_cb(EV_P_ ev_timer *w, int revents)
|
||||||
|
+{
|
||||||
|
+ exit(1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct ev_loop *loop = EV_DEFAULT;
|
||||||
|
struct ev_signal signal_watcher;
|
||||||
|
+ struct ev_timer timeout_watcher;
|
||||||
|
bool background = false;
|
||||||
|
bool verbose = false;
|
||||||
|
struct rtty rtty = {
|
||||||
|
@@ -95,7 +104,7 @@ int main(int argc, char **argv)
|
||||||
|
int c;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
- c = getopt_long(argc, argv, "I:h:p:d:asDt:f:RS:vV", long_options, &option_index);
|
||||||
|
+ c = getopt_long(argc, argv, "I:h:p:d:asDt:f:RS:vVe:", long_options, &option_index);
|
||||||
|
if (c == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -146,6 +155,9 @@ int main(int argc, char **argv)
|
||||||
|
case LONG_OPT_HELP:
|
||||||
|
usage(argv[0]);
|
||||||
|
break;
|
||||||
|
+ case 'e':
|
||||||
|
+ force_exit = atoi(optarg);
|
||||||
|
+ break;
|
||||||
|
default: /* '?' */
|
||||||
|
usage(argv[0]);
|
||||||
|
break;
|
||||||
|
@@ -167,6 +179,10 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
|
ev_signal_init(&signal_watcher, signal_cb, SIGINT);
|
||||||
|
ev_signal_start(loop, &signal_watcher);
|
||||||
|
+ if (force_exit) {
|
||||||
|
+ ev_timer_init(&timeout_watcher, timeout_cb, force_exit, 0.);
|
||||||
|
+ ev_timer_start(loop, &timeout_watcher);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (rtty_start(&rtty) < 0)
|
||||||
|
return -1;
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
Index: rtty-7.1.4/src/rtty.c
|
|
||||||
===================================================================
|
|
||||||
--- rtty-7.1.4.orig/src/rtty.c
|
|
||||||
+++ rtty-7.1.4/src/rtty.c
|
|
||||||
@@ -308,7 +308,8 @@ static void parse_msg(struct rtty *rtty)
|
|
||||||
|
|
||||||
case MSG_TYPE_LOGOUT:
|
|
||||||
tty_logout(rtty, buffer_pull_u8(rb));
|
|
||||||
- break;
|
|
||||||
+ exit(1);
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
case MSG_TYPE_TERMDATA:
|
|
||||||
write_data_to_tty(rtty, buffer_pull_u8(rb), msglen - 1);
|
|
||||||
@@ -429,12 +430,12 @@ static void rtty_timer_cb(struct ev_loop
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (now - rtty->active > RTTY_HEARTBEAT_INTEVAL * 3 / 2) {
|
|
||||||
+/* if (now - rtty->active > RTTY_HEARTBEAT_INTEVAL * 3 / 2) {
|
|
||||||
log_err("Inactive too long time\n");
|
|
||||||
rtty_exit(rtty);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+*/
|
|
||||||
if (now - rtty->last_heartbeat > RTTY_HEARTBEAT_INTEVAL - 1) {
|
|
||||||
rtty->last_heartbeat = now;
|
|
||||||
rtty_send_msg(rtty, MSG_TYPE_HEARTBEAT, NULL, 0);
|
|
||||||
Index: rtty-7.1.4/src/main.c
|
|
||||||
===================================================================
|
|
||||||
--- rtty-7.1.4.orig/src/main.c
|
|
||||||
+++ rtty-7.1.4/src/main.c
|
|
||||||
@@ -95,7 +95,7 @@ int main(int argc, char **argv)
|
|
||||||
int c;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
- c = getopt_long(argc, argv, "I:h:p:d:asDt:f:RS:vV", long_options, &option_index);
|
|
||||||
+ c = getopt_long(argc, argv, "I:h:p:d:asDt:f:RS:vVT:", long_options, &option_index);
|
|
||||||
if (c == -1)
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -109,6 +109,9 @@ int main(int argc, char **argv)
|
|
||||||
case 'p':
|
|
||||||
rtty.port = atoi(optarg);
|
|
||||||
break;
|
|
||||||
+ case 'T':
|
|
||||||
+ rtty.timeout = atoi(optarg);
|
|
||||||
+ break;
|
|
||||||
case 'd':
|
|
||||||
if (strlen(optarg) > 126) {
|
|
||||||
log_err("Description too long\n");
|
|
||||||
Index: rtty-7.1.4/src/rtty.h
|
|
||||||
===================================================================
|
|
||||||
--- rtty-7.1.4.orig/src/rtty.h
|
|
||||||
+++ rtty-7.1.4/src/rtty.h
|
|
||||||
@@ -79,6 +79,8 @@ struct rtty {
|
|
||||||
void *ssl; /* Context wrap of openssl, wolfssl and mbedtls */
|
|
||||||
struct tty *ttys[RTTY_MAX_TTY];
|
|
||||||
struct file_context file_context;
|
|
||||||
+ int timeout;
|
|
||||||
+ struct ev_timer kill_timer;
|
|
||||||
};
|
|
||||||
|
|
||||||
int rtty_start(struct rtty *rtty);
|
|
||||||
@@ -6,7 +6,7 @@ PKG_RELEASE:=1
|
|||||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-client.git
|
PKG_SOURCE_URL=https://github.com/blogic/ucentral-client.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2021-02-15
|
PKG_SOURCE_DATE:=2021-02-15
|
||||||
PKG_SOURCE_VERSION:=cf6333e0934f1b83fdb5cc8368cea2421c97d90b
|
PKG_SOURCE_VERSION:=6194debc0995550c5169972e150506617a2df970
|
||||||
|
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||||
|
|||||||
1
feeds/ucentral/ucentral-client/files/etc/init.d/ucentral
Normal file → Executable file
1
feeds/ucentral/ucentral-client/files/etc/init.d/ucentral
Normal file → Executable file
@@ -15,6 +15,7 @@ start_service() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
|
cp /etc/config-shadow/ucentral /etc/config/
|
||||||
config_load 'ucentral'
|
config_load 'ucentral'
|
||||||
config_get serial 'config' 'serial'
|
config_get serial 'config' 'serial'
|
||||||
config_get server 'config' 'server'
|
config_get server 'config' 'server'
|
||||||
|
|||||||
0
feeds/ucentral/ucentral-client/files/etc/init.d/ustats
Normal file → Executable file
0
feeds/ucentral/ucentral-client/files/etc/init.d/ustats
Normal file → Executable file
2
feeds/ucentral/ucentral-client/files/etc/uci-defaults/zzz-ucentral
Normal file → Executable file
2
feeds/ucentral/ucentral-client/files/etc/uci-defaults/zzz-ucentral
Normal file → Executable file
@@ -7,6 +7,8 @@ uci set system.@system[-1].hostname=$hname
|
|||||||
uci set ucentral.config.serial=$hname
|
uci set ucentral.config.serial=$hname
|
||||||
uci set network.wan6.ifname=@wan
|
uci set network.wan6.ifname=@wan
|
||||||
uci set network.wan.type=bridge
|
uci set network.wan.type=bridge
|
||||||
|
uci rename opennds.@opennds[-1]=opennds
|
||||||
|
uci set opennds.opennds.enabled=0
|
||||||
uci commit
|
uci commit
|
||||||
|
|
||||||
cp -r /etc/config/ /etc/config-shadow/
|
cp -r /etc/config/ /etc/config-shadow/
|
||||||
|
|||||||
0
feeds/ucentral/ucentral-client/files/usr/libexec/ucentral/ucentral_factory.sh
Normal file → Executable file
0
feeds/ucentral/ucentral-client/files/usr/libexec/ucentral/ucentral_factory.sh
Normal file → Executable file
@@ -1,7 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
timeout=$1
|
||||||
|
|
||||||
. /etc/diag.sh
|
. /etc/diag.sh
|
||||||
set_state upgrade
|
set_state upgrade
|
||||||
sleep 60
|
sleep $1
|
||||||
status_led_off
|
status_led_off
|
||||||
set_state done
|
set_state done
|
||||||
|
exit 0
|
||||||
|
|||||||
0
feeds/ucentral/ucentral-client/files/usr/libexec/ucentral/ucentral_sysupgrade.sh
Normal file → Executable file
0
feeds/ucentral/ucentral-client/files/usr/libexec/ucentral/ucentral_sysupgrade.sh
Normal file → Executable file
@@ -1 +0,0 @@
|
|||||||
/ucentral/ucentral-client/.git
|
|
||||||
@@ -6,7 +6,7 @@ PKG_RELEASE:=1
|
|||||||
PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git
|
PKG_SOURCE_URL=https://github.com/blogic/ucentral-schema.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_DATE:=2021-02-15
|
PKG_SOURCE_DATE:=2021-02-15
|
||||||
PKG_SOURCE_VERSION:=16d19ac0a02b29828c92479fdba69f0d7a96cb03
|
PKG_SOURCE_VERSION:=7fb6336b47ebc06a9d990226a028cdf58b7110bd
|
||||||
|
|
||||||
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
||||||
PKG_LICENSE:=BSD-3-Clause
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ endef
|
|||||||
|
|
||||||
define Package/ucentral-tools/install
|
define Package/ucentral-tools/install
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/{dhcpdiscover,dnsprobe,firstcontact,radiusprobe,ip-collide} $(1)/usr/sbin/
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/{dhcpdiscover,dnsprobe,radiusprobe,ip-collide} $(1)/usr/sbin/
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(call BuildPackage,ucentral-tools))
|
$(eval $(call BuildPackage,ucentral-tools))
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
/ucentral/ucentral-wifi/.git
|
|
||||||
@@ -5,8 +5,8 @@ PKG_RELEASE:=1
|
|||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL=git@github.com:stephb9959/ucentralgw.git
|
PKG_SOURCE_URL=git@github.com:stephb9959/ucentralgw.git
|
||||||
PKG_SOURCE_DATE:=2021-03-22
|
PKG_SOURCE_DATE:=2021-03-28
|
||||||
PKG_SOURCE_VERSION:=d4ae407d8b2fabc6ea4ba555061adf3e11025188
|
PKG_SOURCE_VERSION:=f45dac773971b7ad6f1e0687f0e60b0d9c61c02d
|
||||||
#PKG_MIRROR_HASH:=3f6569a5e63fdfd032976ac0f79d736d3935101ac1b97fb370514b013c5e6bb6
|
#PKG_MIRROR_HASH:=3f6569a5e63fdfd032976ac0f79d736d3935101ac1b97fb370514b013c5e6bb6
|
||||||
CMAKE_INSTALL:=1
|
CMAKE_INSTALL:=1
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
/projects/udevmand/.git/
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
From b4b632ac77e22d2522c3cb2cccf24b1dfae379f4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: John Crispin <john@phrozen.org>
|
||||||
|
Date: Mon, 29 Mar 2021 16:05:14 +0200
|
||||||
|
Subject: [PATCH] target: enable vlan-filtering on various targets
|
||||||
|
|
||||||
|
Signed-off-by: John Crispin <john@phrozen.org>
|
||||||
|
---
|
||||||
|
target/linux/ipq40xx/base-files/etc/board.d/02_network | 1 +
|
||||||
|
target/linux/mediatek/mt7622/base-files/etc/board.d/02_network | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
|
||||||
|
index fe21dc8035..8b7364ff33 100755
|
||||||
|
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
|
||||||
|
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
|
||||||
|
@@ -179,6 +179,7 @@ ipq40xx_setup_macs()
|
||||||
|
|
||||||
|
board_config_update
|
||||||
|
board=$(board_name)
|
||||||
|
+ucidef_set_bridge_device bridge
|
||||||
|
ipq40xx_setup_interfaces $board
|
||||||
|
ipq40xx_setup_macs $board
|
||||||
|
board_config_flush
|
||||||
|
diff --git a/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network b/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network
|
||||||
|
index 82dba44587..d8a90e507e 100755
|
||||||
|
--- a/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network
|
||||||
|
+++ b/target/linux/mediatek/mt7622/base-files/etc/board.d/02_network
|
||||||
|
@@ -43,6 +43,7 @@ mediatek_setup_macs()
|
||||||
|
|
||||||
|
board_config_update
|
||||||
|
board=$(board_name)
|
||||||
|
+ucidef_set_bridge_device bridge
|
||||||
|
mediatek_setup_interfaces $board
|
||||||
|
mediatek_setup_macs $board
|
||||||
|
board_config_flush
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
||||||
@@ -3,5 +3,7 @@ profile: linksys_e8450_ubi
|
|||||||
target: mediatek
|
target: mediatek
|
||||||
subtarget: mt7622
|
subtarget: mt7622
|
||||||
description: Build image for the Linksys E8450
|
description: Build image for the Linksys E8450
|
||||||
|
include:
|
||||||
|
- ucentral-ap
|
||||||
diffconfig: |
|
diffconfig: |
|
||||||
CONFIG_TESTING_KERNEL=y
|
CONFIG_TESTING_KERNEL=y
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ profile: linksys_ea8300
|
|||||||
target: ipq40xx
|
target: ipq40xx
|
||||||
subtarget: generic
|
subtarget: generic
|
||||||
description: Build image for the Linksys ea8300
|
description: Build image for the Linksys ea8300
|
||||||
|
include:
|
||||||
|
- ucentral-ap
|
||||||
packages:
|
packages:
|
||||||
- ath10k-firmware-qca4019-ct-htt
|
- ath10k-firmware-qca4019-ct-htt
|
||||||
- ath10k-firmware-qca9888-ct-htt
|
- ath10k-firmware-qca9888-ct-htt
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ feeds:
|
|||||||
path: ../../feeds/ipq807x
|
path: ../../feeds/ipq807x
|
||||||
include:
|
include:
|
||||||
- wifi-ax
|
- wifi-ax
|
||||||
|
- ucentral-ap
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ feeds:
|
|||||||
path: ../../feeds/ipq807x
|
path: ../../feeds/ipq807x
|
||||||
include:
|
include:
|
||||||
- wifi-ax
|
- wifi-ax
|
||||||
|
- ucentral-ap
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ subtarget: generic
|
|||||||
description: Build image for the EdgeCore ECS4100-12ph
|
description: Build image for the EdgeCore ECS4100-12ph
|
||||||
include:
|
include:
|
||||||
- realtek
|
- realtek
|
||||||
|
- ucentral-switch
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ description: Add the ucentral dependencies
|
|||||||
feeds:
|
feeds:
|
||||||
- name: ucentral
|
- name: ucentral
|
||||||
path: ../../feeds/ucentral
|
path: ../../feeds/ucentral
|
||||||
|
- name: tip
|
||||||
|
path: ../../feeds/tip
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
- kmod-batman-adv
|
- kmod-batman-adv
|
||||||
@@ -16,10 +18,10 @@ packages:
|
|||||||
- wpad-mesh-openssl
|
- wpad-mesh-openssl
|
||||||
- ip-bridge
|
- ip-bridge
|
||||||
- dnsmasq-full
|
- dnsmasq-full
|
||||||
|
- firstcontact
|
||||||
- gre
|
- gre
|
||||||
- ucentral-client
|
- ucentral-client
|
||||||
- ucentral-jsonschema
|
- ucentral-jsonschema
|
||||||
- ucentral-mqtt
|
|
||||||
- ucentral-schema
|
- ucentral-schema
|
||||||
- ucentral-wifi
|
- ucentral-wifi
|
||||||
- ucentral-defaults
|
- ucentral-defaults
|
||||||
@@ -28,8 +30,10 @@ packages:
|
|||||||
- uledd
|
- uledd
|
||||||
- usteer
|
- usteer
|
||||||
- udevmand
|
- udevmand
|
||||||
|
- opennds
|
||||||
- rtty-openssl
|
- rtty-openssl
|
||||||
- sqm-scripts
|
- sqm-scripts
|
||||||
|
- tmate
|
||||||
- tcpdump
|
- tcpdump
|
||||||
- vxlan
|
- vxlan
|
||||||
diffconfig: |
|
diffconfig: |
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ feeds:
|
|||||||
path: ../../feeds/ipq807x
|
path: ../../feeds/ipq807x
|
||||||
include:
|
include:
|
||||||
- wifi-ax
|
- wifi-ax
|
||||||
|
- ucentral-ap
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ feeds:
|
|||||||
path: ../../feeds/ipq807x
|
path: ../../feeds/ipq807x
|
||||||
include:
|
include:
|
||||||
- wifi-ax
|
- wifi-ax
|
||||||
|
- ucentral-ap
|
||||||
packages:
|
packages:
|
||||||
- kmod-usb-serial
|
- kmod-usb-serial
|
||||||
- kmod-usb-serial-pl2303
|
- kmod-usb-serial-pl2303
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ subtarget: generic
|
|||||||
description: Build image for the Zyxel GS1900-10HP
|
description: Build image for the Zyxel GS1900-10HP
|
||||||
include:
|
include:
|
||||||
- realtek
|
- realtek
|
||||||
|
- ucentral-switch
|
||||||
|
|||||||
Reference in New Issue
Block a user