Age | Commit message (Collapse) | Author |
|
Fixes: 0662de6 ("socket: add AF_PACKET socket type support")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
socket: add AF_PACKET socket type support
|
|
Add the required infrastructure to support Linux AF_PACKET sockets:
- Add related constants
- Add struct definitions for SOL_PACKET socket options
- Add AF_PACKET family support to sockaddr routines
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
ubus: fix uc_ubus_have_uloop for eloop+uloop combination
|
|
When uloop has been integrated with eloop (in hostapd/wpa_supplicant),
uloop_cancelling will return false, since uloop_run is not being called.
This leads to ubus.defer() calling uloop_run in a context where it can
prevent the other event loop from running.
Fix this by detecting event loop integration via uloop_fd_set_cb being set
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
uloop: add documentation
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
- fix `error()` function documentation
- change error message format order to `msg: strerror`
- change `xxx() failed` messages to just `xxx()`
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Our module documentation provides its own titles, so suppress generation
of default titles.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Do not unset CMAKE_REQUIRED_* variables in order to allow various
feature tests to work properly with nonstandard locations.
Fixes: #186
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
lib: introduce socket library
|
|
Introduce a new socket module which provides bindings for the BSD sockets
API to ucode scripts.
Example usage:
import * as socket from 'socket';
let sk = socket.create(socket.AF_INET, socket.SOCK_STREAM);
sk.connect("192.168.1.1", 80);
sk.send("GET / HTTP/1.0\r\n\r\n");
print(sk.recv(4096));
sk.close();
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The reorder() function takes no `name` parameter, this was a copy-paste
error in the documentation.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
|
|
This is needed when asynchronously processing requests via uloop, e.g.
using uclient.
Example script:
let libubus = require("ubus");
let uloop = require("uloop");
uloop.init();
let ubus = libubus.connect();
ubus.publish("test", {
test: {
call: function(req) {
req.defer();
uloop.timer(1000, () => {
req.reply({ msg: "Hello, world!" }, 0);
});
},
args: {}
},
});
uloop.run();
uloop.done();
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
ubus: automatically clear error information
|
|
vm: rework `in` operator semantics
|
|
- Ensure that testing for array membership does strict equality tests
- Ensure that `(NaN in [ NaN ]) == true`
- Do not perform implicit value conversion when testing for object keys,
to avoid nonsensical results such as `([] in { "[ ]": true }) == true`
- Add test cases for the `in` operator
Fixes: #193
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The function pops the last, not the first element from the array.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Make all functions clear the last error information on success in order to
ensure that `error()` never reports stale information.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Make all functions clear the last error information on success in order to
ensure that `error()` never reports stale information.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Make all functions clear the last error information on success in order to
ensure that `error()` never reports stale information.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
uci: refactor uci.changes() to match documentation
|
|
vm: rework object iteration
|
|
When invoked with an explicit package name argument, retain the autoloaded
configuration within the context state.
Fixes: #188
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Ensure that deleting object keys during iteration is safe by keeping a
global chain of per-object iterators which are advanced to the next key
when the entry that is about to be iterated is deleted.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When removing locals from all scopes, upvalues need to be considered like
in uc_compiler_leave_scope(). Closing them is required to avoid leaving
lingering references to stack values that went out of scope, which would
lead to invalid memory accesses in subsequent code when such upvalues are
used by closures.
Fixes: #187
Signed-off-by: Felix Fietkau <nbd@nbd.name>
[add testcase, reword commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
rtnl: improve event reception in order to avoid ENOBUFS
|
|
Use the same RX buffer size which iproute2 uses as default, in order to
avoid (or rather, delay as much as possible) ENOBUFS conditions when
receiving a large burst of netlink notifications.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Once we're notified about pending data on the netlink event socket,
try to receive as much messages as possible in order to empty the socket
buffer. In contrast to the previous implementation which received one
message per epoll read notification, this avoids some premature ENOBUFS
situations when a huge burst of messages arrives, e.g. due to kernel
side GC runs on the neighbor table.
Since libnl's nl_recvmsgs*() functions do not expose the underlying
-1 error returned by the recvmsg() calls, we need to indirectly check
for errors through errno variable, so clear it out both before the
recvmsgs() call and after successfully completing a message reception
callback invocation.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Only store the callback reference in the registry once the listener
context was successfully initialized, to avoid keeping a lingering
entry when invalid parameters are passed.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
- The expected length was incorrect
- An incorrect MCS MAP index was accessed
- The maximum MCS index number were wrong
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The length constraint of 16 byte was incorrect, the attribute is 8 bytes
long; two bytes for the RX MCS set, two bytes for the highest RX rate,
two bytes for the TX MCS set and two bytes for the highest TX rate.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The attributes are arrays of 6 and 11 u8 values respectively.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
|
|
Allows other C code to gain access to the ubus context without having to know
the layout of the other fields.
Also reduce the amount of unnecessary pointer indirection
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
uloop: support new interval and signal APIs
|
|
syntax: don't treat `as` and `from` as reserved keywords
|
|
ECMAScript allows using `as` and `from` as identifiers so follow suit
and don't treat them specially while parsing. Extend the compiler logic
instead to check for TK_LABEL tokens with the expected value to properly
parse import and export statements.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Add bindings for the new uloop interval and signal handling APIs and extend
the CMake logic to properly detect the presence of these facilities.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Check if `-D_FORTIFY_SOURCE` was already passed via the CFLAGS environment
variable and only add the flag if not already present.
Fixes: ea046bd ("build: enable source fortification by default")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
On macOS, the `memmem()` function returns `NULL` instead of the expected
start of the haystack string when given a zero-length needle argument.
Add special case handling for a zero-length needle argument to ensure
that the expected offset `0` is returned on all systems.
Ref: #176
Suggested-by: Erwan MAS <erwan@mas.nom.fr>
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When compiling with optimizations, gcc reports:
.../nl80211.c: In function ‘uc_nl_convert_rta_vht_mcs’:
.../nl80211.c:1310:31: error: ‘max_idx’ may be used uninitialized [-Werror=maybe-uninitialized]
1310 | for (j = 0; j <= max_idx; j++)
| ~~^~~~~~~~~~
Slightly refactor the code to avoid this issue.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When building against glibc with enabled source fortification, gcc reports
the following issue:
.../vm.c: In function ‘uc_vm_signal_raise’:
.../vm.c:3161:9: error: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result]
3161 | write(vm->signal.sigpipe[1], &signum, sizeof(signum));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Since we cannot do any meaningful handling of a potential write error in
the affected signal handler context, simply solve this issue by wrapping
the `write()` call into an empty `if ()` statement.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Also switch debug builds to -Og instead of -O0 in order to make
-D_FORTIFY_SOURCE=2 effective for debug builds.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Switch to a custom fork of the clean jsdoc theme to address a number
of quirks and to directly incorporate CSS and markup changes.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Fix the jsdoc C transpiler plugin to properly detect the start of indented
multi line comment blocks.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Add missing documentation for the `require()` function and factor our
the description of the compile options dictionary into a separate typedef.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
In case `uci.cursor.configs()` is invoked with a completely empty
configuration directory, the empty configuration list is not free
before returning the `UCI_ERR_NOTFOUND` status.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|