int config_parse_tunnel_address(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) { NetDev *n = userdata; union in_addr_union *addr = data; int r; assert(filename); assert(lvalue); assert(rvalue); assert(data); r = net_parse_inaddr(rvalue, &n->family, addr); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Tunnel address is invalid, ignoring assignment: %s", rvalue); return 0; } return 0; }
int config_parse_broadcast(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) { Network *network = userdata; _cleanup_address_free_ Address *n = NULL; _cleanup_free_ char *address = NULL; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = address_new_static(network, section_line, &n); if (r < 0) return r; if (n->family == AF_INET6) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Broadcast is not valid for IPv6 addresses, " "ignoring assignment: %s", address); return 0; } r = net_parse_inaddr(address, &n->family, &n->broadcast); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Broadcast is invalid, ignoring assignment: %s", address); return 0; } n = NULL; return 0; }
int config_parse_gateway(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) { Network *network = userdata; _cleanup_route_free_ Route *n = NULL; _cleanup_free_ char *route = NULL; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); if (streq(section, "Network")) { /* we are not in an Route section, so treat * this as the special '0' section */ section_line = 0; } r = route_new_static(network, section_line, &n); if (r < 0) return r; r = net_parse_inaddr(rvalue, &n->family, &n->in_addr); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Route is invalid, ignoring assignment: %s", route); return 0; } n = NULL; return 0; }
int config_parse_dns(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) { Address **dns = data; _cleanup_address_free_ Address *n = NULL; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = address_new_dynamic(&n); if (r < 0) return r; r = net_parse_inaddr(rvalue, &n->family, &n->in_addr); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "DNS address is invalid, ignoring assignment: %s", rvalue); return 0; } *dns = n; n = NULL; return 0; }
int config_parse_address(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) { Network *network = userdata; _cleanup_address_free_ Address *n = NULL; _cleanup_free_ char *address = NULL; const char *e; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); if (streq(section, "Network")) { /* we are not in an Address section, so treat * this as the special '0' section */ section_line = 0; } r = address_new_static(network, section_line, &n); if (r < 0) return r; /* Address=address/prefixlen */ /* prefixlen */ e = strchr(rvalue, '/'); if (e) { unsigned i; r = safe_atou(e + 1, &i); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Interface prefix length is invalid, " "ignoring assignment: %s", e + 1); return 0; } n->prefixlen = (unsigned char) i; address = strndup(rvalue, e - rvalue); if (!address) return log_oom(); } else { address = strdup(rvalue); if (!address) return log_oom(); } r = net_parse_inaddr(address, &n->family, &n->in_addr); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Address is invalid, ignoring assignment: %s", address); return 0; } if (n->family == AF_INET && !n->broadcast.s_addr) n->broadcast.s_addr = n->in_addr.in.s_addr | htonl(0xfffffffflu >> n->prefixlen); n = NULL; return 0; }
int config_parse_destination(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) { Network *network = userdata; _cleanup_route_free_ Route *n = NULL; _cleanup_free_ char *address = NULL; const char *e; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = route_new_static(network, section_line, &n); if (r < 0) return r; /* Destination=address/prefixlen */ /* address */ e = strchr(rvalue, '/'); if (e) { address = strndup(rvalue, e - rvalue); if (!address) return log_oom(); } else { address = strdup(rvalue); if (!address) return log_oom(); } r = net_parse_inaddr(address, &n->family, &n->dst_addr); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Destination is invalid, ignoring assignment: %s", address); return 0; } /* prefixlen */ if (e) { unsigned i; r = safe_atou(e + 1, &i); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Route destination prefix length is invalid, " "ignoring assignment: %s", e + 1); return 0; } n->dst_prefixlen = (unsigned char) i; } else { switch (n->family) { case AF_INET: n->dst_prefixlen = 32; break; case AF_INET6: n->dst_prefixlen = 128; break; } } n = NULL; return 0; }