mirror of
https://github.com/systemd/systemd
synced 2026-03-23 15:24:54 +01:00
Compare commits
No commits in common. "8bdef77400d21a344e09eb73773789bddd6b76af" and "a2efdaac077e3aa41720636609be9ff83075bc2e" have entirely different histories.
8bdef77400
...
a2efdaac07
@ -553,12 +553,14 @@ char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy) {
|
|||||||
|
|
||||||
/* Let's see if we should shows this in dot notation */
|
/* Let's see if we should shows this in dot notation */
|
||||||
if (t < USEC_PER_MINUTE && b > 0) {
|
if (t < USEC_PER_MINUTE && b > 0) {
|
||||||
signed char j = 0;
|
usec_t cc;
|
||||||
|
signed char j;
|
||||||
|
|
||||||
for (usec_t cc = table[i].usec; cc > 1; cc /= 10)
|
j = 0;
|
||||||
|
for (cc = table[i].usec; cc > 1; cc /= 10)
|
||||||
j++;
|
j++;
|
||||||
|
|
||||||
for (usec_t cc = accuracy; cc > 1; cc /= 10) {
|
for (cc = accuracy; cc > 1; cc /= 10) {
|
||||||
b /= 10;
|
b /= 10;
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,6 +32,10 @@ _SOURCE_REALTIME_TIMESTAMP={source_realtime_ts}
|
|||||||
DATA={data}
|
DATA={data}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
m = 0x198603b12d7
|
||||||
|
realtime_ts = 1404101101501873
|
||||||
|
monotonic_ts = 1753961140951
|
||||||
|
source_realtime_ts = 1404101101483516
|
||||||
priority = 3
|
priority = 3
|
||||||
facility = 6
|
facility = 6
|
||||||
|
|
||||||
@ -51,14 +55,18 @@ for i in range(OPTIONS.n):
|
|||||||
data = '{:0{}}'.format(counter, OPTIONS.data_size)
|
data = '{:0{}}'.format(counter, OPTIONS.data_size)
|
||||||
counter += 1
|
counter += 1
|
||||||
|
|
||||||
entry = template.format(m=0x198603b12d7 + i,
|
entry = template.format(m=m,
|
||||||
realtime_ts=1404101101501873 + i,
|
realtime_ts=realtime_ts,
|
||||||
monotonic_ts=1753961140951 + i,
|
monotonic_ts=monotonic_ts,
|
||||||
source_realtime_ts=1404101101483516 + i,
|
source_realtime_ts=source_realtime_ts,
|
||||||
priority=priority,
|
priority=priority,
|
||||||
facility=facility,
|
facility=facility,
|
||||||
message=message,
|
message=message,
|
||||||
data=data)
|
data=data)
|
||||||
|
m += 1
|
||||||
|
realtime_ts += 1
|
||||||
|
monotonic_ts += 1
|
||||||
|
source_realtime_ts += 1
|
||||||
|
|
||||||
bytes += len(entry)
|
bytes += len(entry)
|
||||||
|
|
||||||
|
|||||||
@ -268,12 +268,6 @@ fuzzers += [
|
|||||||
]
|
]
|
||||||
|
|
||||||
tests += [
|
tests += [
|
||||||
[['src/network/test-networkd-address.c'],
|
|
||||||
[libnetworkd_core,
|
|
||||||
libsystemd_network],
|
|
||||||
[],
|
|
||||||
network_includes],
|
|
||||||
|
|
||||||
[['src/network/test-networkd-conf.c'],
|
[['src/network/test-networkd-conf.c'],
|
||||||
[libnetworkd_core,
|
[libnetworkd_core,
|
||||||
libsystemd_network],
|
libsystemd_network],
|
||||||
|
|||||||
@ -621,17 +621,19 @@ int manager_has_address(Manager *manager, int family, const union in_addr_union
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* format_lifetime(char *buf, size_t l, uint32_t lifetime) {
|
char *format_lifetime(char *buf, size_t l, uint32_t lifetime) {
|
||||||
|
char *p = buf;
|
||||||
|
|
||||||
assert(buf);
|
assert(buf);
|
||||||
assert(l > 4);
|
assert(l > 0);
|
||||||
|
|
||||||
if (lifetime == CACHE_INFO_INFINITY_LIFE_TIME)
|
if (lifetime == CACHE_INFO_INFINITY_LIFE_TIME) {
|
||||||
return "forever";
|
strscpy(buf, l, "forever");
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
sprintf(buf, "for ");
|
l -= strpcpy(&p, l, "for ");
|
||||||
/* format_timespan() never fails */
|
return format_timespan(p, l, lifetime * USEC_PER_SEC, USEC_PER_SEC);
|
||||||
assert_se(format_timespan(buf + 4, l - 4, lifetime * USEC_PER_SEC, USEC_PER_SEC));
|
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void log_address_debug(const Address *address, const char *str, const Link *link) {
|
static void log_address_debug(const Address *address, const char *str, const Link *link) {
|
||||||
@ -1271,17 +1273,17 @@ int request_process_address(Request *req) {
|
|||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
r = address_configure(req->address, link, req->netlink_handler);
|
r = address_get(link, req->address, &a);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = address_configure(a, link, req->netlink_handler);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
/* To prevent a double decrement on failure in after_configure(). */
|
/* To prevent a double decrement on failure in after_configure(). */
|
||||||
req->message_counter = NULL;
|
req->message_counter = NULL;
|
||||||
|
|
||||||
r = address_get(link, req->address, &a);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
if (req->after_configure) {
|
if (req->after_configure) {
|
||||||
r = req->after_configure(req, a);
|
r = req->after_configure(req, a);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|||||||
@ -50,7 +50,7 @@ typedef struct Address {
|
|||||||
address_ready_callback_t callback;
|
address_ready_callback_t callback;
|
||||||
} Address;
|
} Address;
|
||||||
|
|
||||||
const char* format_lifetime(char *buf, size_t l, uint32_t lifetime) _warn_unused_result_;
|
char *format_lifetime(char *buf, size_t l, uint32_t lifetime) _warn_unused_result_;
|
||||||
/* Note: the lifetime of the compound literal is the immediately surrounding block,
|
/* Note: the lifetime of the compound literal is the immediately surrounding block,
|
||||||
* see C11 §6.5.2.5, and
|
* see C11 §6.5.2.5, and
|
||||||
* https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
|
* https://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks */
|
||||||
@ -58,7 +58,7 @@ const char* format_lifetime(char *buf, size_t l, uint32_t lifetime) _warn_unused
|
|||||||
format_lifetime((char[FORMAT_TIMESPAN_MAX+STRLEN("for ")]){}, FORMAT_TIMESPAN_MAX+STRLEN("for "), lifetime)
|
format_lifetime((char[FORMAT_TIMESPAN_MAX+STRLEN("for ")]){}, FORMAT_TIMESPAN_MAX+STRLEN("for "), lifetime)
|
||||||
|
|
||||||
int address_new(Address **ret);
|
int address_new(Address **ret);
|
||||||
Address* address_free(Address *address);
|
Address *address_free(Address *address);
|
||||||
int address_get(Link *link, const Address *in, Address **ret);
|
int address_get(Link *link, const Address *in, Address **ret);
|
||||||
int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
|
int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
|
||||||
int address_remove(const Address *address, Link *link);
|
int address_remove(const Address *address, Link *link);
|
||||||
|
|||||||
@ -1,28 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
||||||
|
|
||||||
#include "networkd-address.h"
|
|
||||||
#include "tests.h"
|
|
||||||
|
|
||||||
static void test_FORMAT_LIFETIME_one(uint32_t lifetime, const char *expected) {
|
|
||||||
const char *t = FORMAT_LIFETIME(lifetime);
|
|
||||||
|
|
||||||
log_debug("%"PRIu32 " → \"%s\" (expected \"%s\")", lifetime, t, expected);
|
|
||||||
assert_se(streq(t, expected));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_FORMAT_LIFETIME(void) {
|
|
||||||
log_info("/* %s */", __func__);
|
|
||||||
|
|
||||||
test_FORMAT_LIFETIME_one(0, "for 0");
|
|
||||||
test_FORMAT_LIFETIME_one(1, "for 1s");
|
|
||||||
test_FORMAT_LIFETIME_one(3 * (USEC_PER_WEEK/USEC_PER_SEC), "for 3w");
|
|
||||||
test_FORMAT_LIFETIME_one(CACHE_INFO_INFINITY_LIFE_TIME, "forever");
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
test_setup_logging(LOG_INFO);
|
|
||||||
|
|
||||||
test_FORMAT_LIFETIME();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@ -247,13 +247,13 @@ static ssize_t udev_event_subst_format(
|
|||||||
r = sd_device_get_devpath(dev, &val);
|
r = sd_device_get_devpath(dev, &val);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_KERNEL:
|
case FORMAT_SUBST_KERNEL:
|
||||||
r = sd_device_get_sysname(dev, &val);
|
r = sd_device_get_sysname(dev, &val);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_KERNEL_NUMBER:
|
case FORMAT_SUBST_KERNEL_NUMBER:
|
||||||
r = sd_device_get_sysnum(dev, &val);
|
r = sd_device_get_sysnum(dev, &val);
|
||||||
@ -261,7 +261,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
goto null_terminate;
|
goto null_terminate;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_ID:
|
case FORMAT_SUBST_ID:
|
||||||
if (!event->dev_parent)
|
if (!event->dev_parent)
|
||||||
@ -269,7 +269,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
r = sd_device_get_sysname(event->dev_parent, &val);
|
r = sd_device_get_sysname(event->dev_parent, &val);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_DRIVER:
|
case FORMAT_SUBST_DRIVER:
|
||||||
if (!event->dev_parent)
|
if (!event->dev_parent)
|
||||||
@ -279,7 +279,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
goto null_terminate;
|
goto null_terminate;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_MAJOR:
|
case FORMAT_SUBST_MAJOR:
|
||||||
case FORMAT_SUBST_MINOR: {
|
case FORMAT_SUBST_MINOR: {
|
||||||
@ -288,7 +288,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
r = sd_device_get_devnum(dev, &devnum);
|
r = sd_device_get_devnum(dev, &devnum);
|
||||||
if (r < 0 && r != -ENOENT)
|
if (r < 0 && r != -ENOENT)
|
||||||
return r;
|
return r;
|
||||||
strpcpyf(&s, l, "%u", r < 0 ? 0 : type == FORMAT_SUBST_MAJOR ? major(devnum) : minor(devnum));
|
l = strpcpyf(&s, l, "%u", r < 0 ? 0 : type == FORMAT_SUBST_MAJOR ? major(devnum) : minor(devnum));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FORMAT_SUBST_RESULT: {
|
case FORMAT_SUBST_RESULT: {
|
||||||
@ -307,7 +307,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (index == 0)
|
if (index == 0)
|
||||||
strpcpy(&s, l, event->program_result);
|
l = strpcpy(&s, l, event->program_result);
|
||||||
else {
|
else {
|
||||||
const char *start, *p;
|
const char *start, *p;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
@ -329,11 +329,11 @@ static ssize_t udev_event_subst_format(
|
|||||||
start = p;
|
start = p;
|
||||||
/* %c{2+} copies the whole string from the second part on */
|
/* %c{2+} copies the whole string from the second part on */
|
||||||
if (has_plus)
|
if (has_plus)
|
||||||
strpcpy(&s, l, start);
|
l = strpcpy(&s, l, start);
|
||||||
else {
|
else {
|
||||||
while (*p && !strchr(WHITESPACE, *p))
|
while (*p && !strchr(WHITESPACE, *p))
|
||||||
p++;
|
p++;
|
||||||
strnpcpy(&s, l, start, p - start);
|
l = strnpcpy(&s, l, start, p - start);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -367,7 +367,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
count = udev_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT);
|
count = udev_replace_chars(vbuf, UDEV_ALLOWED_CHARS_INPUT);
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
log_device_debug(dev, "%i character(s) replaced", count);
|
log_device_debug(dev, "%i character(s) replaced", count);
|
||||||
strpcpy(&s, l, vbuf);
|
l = strpcpy(&s, l, vbuf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FORMAT_SUBST_PARENT:
|
case FORMAT_SUBST_PARENT:
|
||||||
@ -381,7 +381,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
goto null_terminate;
|
goto null_terminate;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val + STRLEN("/dev/"));
|
l = strpcpy(&s, l, val + STRLEN("/dev/"));
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_DEVNODE:
|
case FORMAT_SUBST_DEVNODE:
|
||||||
r = sd_device_get_devname(dev, &val);
|
r = sd_device_get_devname(dev, &val);
|
||||||
@ -389,34 +389,34 @@ static ssize_t udev_event_subst_format(
|
|||||||
goto null_terminate;
|
goto null_terminate;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_NAME:
|
case FORMAT_SUBST_NAME:
|
||||||
if (event->name)
|
if (event->name)
|
||||||
strpcpy(&s, l, event->name);
|
l = strpcpy(&s, l, event->name);
|
||||||
else if (sd_device_get_devname(dev, &val) >= 0)
|
else if (sd_device_get_devname(dev, &val) >= 0)
|
||||||
strpcpy(&s, l, val + STRLEN("/dev/"));
|
l = strpcpy(&s, l, val + STRLEN("/dev/"));
|
||||||
else {
|
else {
|
||||||
r = sd_device_get_sysname(dev, &val);
|
r = sd_device_get_sysname(dev, &val);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_LINKS:
|
case FORMAT_SUBST_LINKS:
|
||||||
FOREACH_DEVICE_DEVLINK(dev, val)
|
FOREACH_DEVICE_DEVLINK(dev, val)
|
||||||
if (s == dest)
|
if (s == dest)
|
||||||
strpcpy(&s, l, val + STRLEN("/dev/"));
|
l = strpcpy(&s, l, val + STRLEN("/dev/"));
|
||||||
else
|
else
|
||||||
strpcpyl(&s, l, " ", val + STRLEN("/dev/"), NULL);
|
l = strpcpyl(&s, l, " ", val + STRLEN("/dev/"), NULL);
|
||||||
if (s == dest)
|
if (s == dest)
|
||||||
goto null_terminate;
|
goto null_terminate;
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_ROOT:
|
case FORMAT_SUBST_ROOT:
|
||||||
strpcpy(&s, l, "/dev");
|
l = strpcpy(&s, l, "/dev");
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_SYS:
|
case FORMAT_SUBST_SYS:
|
||||||
strpcpy(&s, l, "/sys");
|
l = strpcpy(&s, l, "/sys");
|
||||||
break;
|
break;
|
||||||
case FORMAT_SUBST_ENV:
|
case FORMAT_SUBST_ENV:
|
||||||
if (isempty(attr))
|
if (isempty(attr))
|
||||||
@ -426,7 +426,7 @@ static ssize_t udev_event_subst_format(
|
|||||||
goto null_terminate;
|
goto null_terminate;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
strpcpy(&s, l, val);
|
l = strpcpy(&s, l, val);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert_not_reached("Unknown format substitution type");
|
assert_not_reached("Unknown format substitution type");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user