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; union in_addr_union buffer; unsigned char prefixlen; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = route_new_static(network, filename, section_line, &n); if (r < 0) return r; r = in_addr_prefix_from_string(rvalue, AF_INET, &buffer, &prefixlen); if (r < 0) { r = in_addr_prefix_from_string(rvalue, AF_INET6, &buffer, &prefixlen); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Route %s= prefix is invalid, ignoring assignment: %s", lvalue, rvalue); return 0; } n->family = AF_INET6; } else n->family = AF_INET; if (streq(lvalue, "Destination")) { n->dst = buffer; n->dst_prefixlen = prefixlen; } else if (streq(lvalue, "Source")) { n->src = buffer; n->src_prefixlen = prefixlen; } else assert_not_reached(lvalue); n = NULL; return 0; }
int config_parse_routing_policy_rule_prefix( 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) { _cleanup_routing_policy_rule_free_ RoutingPolicyRule *n = NULL; Network *network = userdata; union in_addr_union buffer; uint8_t prefixlen; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = routing_policy_rule_new_static(network, filename, section_line, &n); if (r < 0) return r; r = in_addr_prefix_from_string(rvalue, AF_INET, &buffer, &prefixlen); if (r < 0) { r = in_addr_prefix_from_string(rvalue, AF_INET6, &buffer, &prefixlen); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "RPDB rule prefix is invalid, ignoring assignment: %s", rvalue); return 0; } n->family = AF_INET6; } else n->family = AF_INET; if (streq(lvalue, "To")) { n->to = buffer; n->to_prefixlen = prefixlen; } else { n->from = buffer; n->from_prefixlen = prefixlen; } n = NULL; return 0; }
int config_parse_6rd_prefix(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) { Tunnel *t = userdata; assert(filename); assert(lvalue); assert(rvalue); union in_addr_union p; uint8_t l; int r; r = in_addr_prefix_from_string(rvalue, AF_INET6, &p, &l); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse 6rd prefix \"%s\", ignoring: %m", rvalue); return 0; } if (l == 0) { log_syntax(unit, LOG_ERR, filename, line, 0, "6rd prefix length of \"%s\" must be greater than zero, ignoring", rvalue); return 0; } t->sixrd_prefix = p.in6; t->sixrd_prefixlen = l; return 0; }
int config_parse_address_label_prefix(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) { _cleanup_address_label_free_ AddressLabel *n = NULL; Network *network = userdata; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = address_label_new_static(network, filename, section_line, &n); if (r < 0) return r; r = in_addr_prefix_from_string(rvalue, AF_INET6, &n->in_addr, &n->prefixlen); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Address label is invalid, ignoring assignment: %s", rvalue); return 0; } n = NULL; return 0; }
int config_parse_prefix(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_(prefix_free_or_set_invalidp) Prefix *p = NULL; uint8_t prefixlen = 64; union in_addr_union in6addr; int r; assert(filename); assert(section); assert(lvalue); assert(rvalue); assert(data); r = prefix_new_static(network, filename, section_line, &p); if (r < 0) return r; r = in_addr_prefix_from_string(rvalue, AF_INET6, &in6addr, &prefixlen); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Prefix is invalid, ignoring assignment: %s", rvalue); return 0; } if (sd_radv_prefix_set_prefix(p->radv_prefix, &in6addr.in6, prefixlen) < 0) return -EADDRNOTAVAIL; log_syntax(unit, LOG_INFO, filename, line, r, "Found prefix %s", rvalue); p = NULL; return 0; }