static void test_radv_prefix(void) { sd_radv_prefix *p; printf("* %s\n", __FUNCTION__); assert_se(sd_radv_prefix_new(&p) >= 0); assert_se(sd_radv_prefix_set_onlink(NULL, true) < 0); assert_se(sd_radv_prefix_set_onlink(p, true) >= 0); assert_se(sd_radv_prefix_set_onlink(p, false) >= 0); assert_se(sd_radv_prefix_set_address_autoconfiguration(NULL, true) < 0); assert_se(sd_radv_prefix_set_address_autoconfiguration(p, true) >= 0); assert_se(sd_radv_prefix_set_address_autoconfiguration(p, false) >= 0); assert_se(sd_radv_prefix_set_valid_lifetime(NULL, true) < 0); assert_se(sd_radv_prefix_set_valid_lifetime(p, ~0) >= 0); assert_se(sd_radv_prefix_set_valid_lifetime(p, 42) >= 0); assert_se(sd_radv_prefix_set_valid_lifetime(p, 0) >= 0); assert_se(sd_radv_prefix_set_preferred_lifetime(NULL, true) < 0); assert_se(sd_radv_prefix_set_preferred_lifetime(p, ~0) >= 0); assert_se(sd_radv_prefix_set_preferred_lifetime(p, 42) >= 0); assert_se(sd_radv_prefix_set_preferred_lifetime(p, 0) >= 0); assert_se(sd_radv_prefix_set_prefix(NULL, NULL, 0) < 0); assert_se(sd_radv_prefix_set_prefix(p, NULL, 0) < 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 64) >= 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 0) < 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 1) < 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 2) < 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 3) >= 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 125) >= 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 128) >= 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 129) < 0); assert_se(sd_radv_prefix_set_prefix(p, &prefix[0].address, 255) < 0); p = sd_radv_prefix_unref(p); assert_se(!p); }
int config_parse_prefix_flags(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; int r, val; 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 = parse_boolean(rvalue); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse address flag, ignoring: %s", rvalue); return 0; } val = r; if (streq(lvalue, "OnLink")) r = sd_radv_prefix_set_onlink(p->radv_prefix, val); else if (streq(lvalue, "AddressAutoconfiguration")) r = sd_radv_prefix_set_address_autoconfiguration(p->radv_prefix, val); if (r < 0) return r; p = NULL; return 0; }