systemd: merge branch systemd into master
This commit is contained in:
@@ -244,7 +244,12 @@ int extract_first_word_and_warn(
|
||||
return log_syntax(unit, LOG_ERR, filename, line, r, "Unable to decode word \"%s\", ignoring: %m", rvalue);
|
||||
}
|
||||
|
||||
int extract_many_words(const char **p, const char *separators, ExtractFlags flags, ...) {
|
||||
/* We pass ExtractFlags as unsigned int (to avoid undefined behaviour when passing
|
||||
* an object that undergoes default argument promotion as an argument to va_start).
|
||||
* Let's make sure that ExtractFlags fits into an unsigned int. */
|
||||
assert_cc(sizeof(enum ExtractFlags) <= sizeof(unsigned));
|
||||
|
||||
int extract_many_words(const char **p, const char *separators, unsigned flags, ...) {
|
||||
va_list ap;
|
||||
char **l;
|
||||
int n = 0, i, c, r;
|
||||
|
@@ -32,4 +32,4 @@ typedef enum ExtractFlags {
|
||||
|
||||
int extract_first_word(const char **p, char **ret, const char *separators, ExtractFlags flags);
|
||||
int extract_first_word_and_warn(const char **p, char **ret, const char *separators, ExtractFlags flags, const char *unit, const char *filename, unsigned line, const char *rvalue);
|
||||
int extract_many_words(const char **p, const char *separators, ExtractFlags flags, ...) _sentinel_;
|
||||
int extract_many_words(const char **p, const char *separators, unsigned flags, ...) _sentinel_;
|
||||
|
@@ -431,6 +431,7 @@ int in_addr_default_subnet_mask(const struct in_addr *addr, struct in_addr *mask
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0 /* NM_IGNORED */
|
||||
int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen) {
|
||||
assert(addr);
|
||||
|
||||
@@ -466,3 +467,46 @@ int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen)
|
||||
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
int in_addr_prefix_from_string(const char *p, int family, union in_addr_union *ret_prefix, uint8_t *ret_prefixlen) {
|
||||
union in_addr_union buffer;
|
||||
const char *e, *l;
|
||||
uint8_t k;
|
||||
int r;
|
||||
|
||||
assert(p);
|
||||
|
||||
if (!IN_SET(family, AF_INET, AF_INET6))
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
e = strchr(p, '/');
|
||||
if (e)
|
||||
l = strndupa(p, e - p);
|
||||
else
|
||||
l = p;
|
||||
|
||||
r = in_addr_from_string(family, l, &buffer);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
k = FAMILY_ADDRESS_SIZE(family) * 8;
|
||||
|
||||
if (e) {
|
||||
uint8_t n;
|
||||
|
||||
r = safe_atou8(e + 1, &n);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (n > k)
|
||||
return -ERANGE;
|
||||
|
||||
k = n;
|
||||
}
|
||||
|
||||
*ret_prefix = buffer;
|
||||
*ret_prefixlen = k;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* NM_IGNORED */
|
||||
|
@@ -60,6 +60,7 @@ struct in_addr* in_addr_prefixlen_to_netmask(struct in_addr *addr, unsigned char
|
||||
int in_addr_default_prefixlen(const struct in_addr *addr, unsigned char *prefixlen);
|
||||
int in_addr_default_subnet_mask(const struct in_addr *addr, struct in_addr *mask);
|
||||
int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen);
|
||||
int in_addr_prefix_from_string(const char *p, int family, union in_addr_union *ret_prefix, uint8_t *ret_prefixlen);
|
||||
|
||||
static inline size_t FAMILY_ADDRESS_SIZE(int family) {
|
||||
assert(family == AF_INET || family == AF_INET6);
|
||||
|
@@ -76,6 +76,18 @@ void log_close_console(void);
|
||||
void log_parse_environment(void);
|
||||
|
||||
#if 0 /* NM_IGNORED */
|
||||
int log_dispatch_internal(
|
||||
int level,
|
||||
int error,
|
||||
const char *file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *object_field,
|
||||
const char *object,
|
||||
const char *extra,
|
||||
const char *extra_field,
|
||||
char *buffer);
|
||||
|
||||
int log_internal(
|
||||
int level,
|
||||
int error,
|
||||
@@ -116,7 +128,7 @@ int log_object_internalv(
|
||||
const char *extra_field,
|
||||
const char *extra,
|
||||
const char *format,
|
||||
va_list ap) _printf_(9,0);
|
||||
va_list ap) _printf_(10,0);
|
||||
|
||||
int log_struct_internal(
|
||||
int level,
|
||||
@@ -138,7 +150,7 @@ int log_format_iovec(
|
||||
bool newline_separator,
|
||||
int error,
|
||||
const char *format,
|
||||
va_list ap);
|
||||
va_list ap) _printf_(6, 0);
|
||||
|
||||
/* This modifies the buffer passed! */
|
||||
int log_dump_internal(
|
||||
@@ -168,6 +180,9 @@ void log_assert_failed_return(
|
||||
int line,
|
||||
const char *func);
|
||||
|
||||
#define log_dispatch(level, error, buffer) \
|
||||
log_dispatch_internal(level, error, __FILE__, __LINE__, __func__, NULL, NULL, NULL, NULL, buffer)
|
||||
|
||||
/* Logging with level */
|
||||
#define log_full_errno(level, error, ...) \
|
||||
({ \
|
||||
|
@@ -29,7 +29,13 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef HAVE_SYS_AUXV_H
|
||||
#include <sys/auxv.h>
|
||||
# include <sys/auxv.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_SYS_RANDOM_H
|
||||
# include <sys/random.h>
|
||||
#else
|
||||
# include <linux/random.h>
|
||||
#endif
|
||||
|
||||
#include "fd-util.h"
|
||||
|
@@ -351,8 +351,47 @@ int config_parse_iaid(const char *unit,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_bridge_port_priority(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
uint16_t i;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
r = safe_atou16(rvalue, &i);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Failed to parse bridge port priority, ignoring: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (i > LINK_BRIDGE_PORT_PRIORITY_MAX) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||
"Bridge port priority is larger than maximum %u, ignoring: %s", LINK_BRIDGE_PORT_PRIORITY_MAX, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
*((uint16_t *)data) = i;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* NM_IGNORED */
|
||||
|
||||
|
||||
void serialize_in_addrs(FILE *f, const struct in_addr *addresses, size_t size) {
|
||||
unsigned i;
|
||||
|
||||
|
@@ -26,6 +26,9 @@
|
||||
#include "condition.h"
|
||||
#include "udev.h"
|
||||
|
||||
#define LINK_BRIDGE_PORT_PRIORITY_INVALID 128
|
||||
#define LINK_BRIDGE_PORT_PRIORITY_MAX 63
|
||||
|
||||
bool net_match_config(const struct ether_addr *match_mac,
|
||||
char * const *match_path,
|
||||
char * const *match_driver,
|
||||
@@ -62,6 +65,10 @@ int config_parse_iaid(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int config_parse_bridge_port_priority(const char *unit, const char *filename, unsigned line,
|
||||
const char *section, unsigned section_line, const char *lvalue,
|
||||
int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
||||
int net_get_unique_predictable_data(struct udev_device *device, uint64_t *result);
|
||||
const char *net_get_name(struct udev_device *device);
|
||||
|
||||
|
Reference in New Issue
Block a user