static void test_in_addr_prefix_intersect_one(unsigned f, const char *a, unsigned apl, const char *b, unsigned bpl, int result) { union in_addr_union ua, ub; assert_se(in_addr_from_string(f, a, &ua) >= 0); assert_se(in_addr_from_string(f, b, &ub) >= 0); assert_se(in_addr_prefix_intersect(f, &ua, apl, &ub, bpl) == result); }
static void test_in_addr_prefix_next_one(unsigned f, const char *before, unsigned pl, const char *after) { union in_addr_union ubefore, uafter, t; assert_se(in_addr_from_string(f, before, &ubefore) >= 0); t = ubefore; assert_se((in_addr_prefix_next(f, &t, pl) > 0) == !!after); if (after) { assert_se(in_addr_from_string(f, after, &uafter) >= 0); assert_se(in_addr_equal(f, &t, &uafter) > 0); } }
static int test_acd(const char *ifname, const char *address) { _cleanup_(sd_event_unrefp) sd_event *e = NULL; _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL, *reply = NULL; union in_addr_union pa; struct ether_addr ha; int ifindex; assert_se(in_addr_from_string(AF_INET, address, &pa) >= 0); assert_se(sd_event_new(&e) >= 0); assert_se(sd_netlink_open(&rtnl) >= 0); assert_se(sd_netlink_attach_event(rtnl, e, 0) >= 0); assert_se(sd_rtnl_message_new_link(rtnl, &m, RTM_GETLINK, 0) >= 0); assert_se(sd_netlink_message_append_string(m, IFLA_IFNAME, ifname) >= 0); assert_se(sd_netlink_call(rtnl, m, 0, &reply) >= 0); assert_se(sd_rtnl_message_link_get_ifindex(reply, &ifindex) >= 0); assert_se(sd_netlink_message_read_ether_addr(reply, IFLA_ADDRESS, &ha) >= 0); client_run(ifindex, &pa.in, &ha, e); return EXIT_SUCCESS; }
static void test_in_addr_to_string_one(int f, const char *addr) { union in_addr_union ua; _cleanup_free_ char *r = NULL; assert_se(in_addr_from_string(f, addr, &ua) >= 0); assert_se(in_addr_to_string(f, &ua, &r) >= 0); printf("test_in_addr_to_string_one: %s == %s\n", addr, r); assert_se(streq(addr, r)); }
int config_parse_tunnel_key(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) { union in_addr_union buffer; Tunnel *t = userdata; uint32_t k; int r; assert(filename); assert(lvalue); assert(rvalue); assert(data); r = in_addr_from_string(AF_INET, rvalue, &buffer); if (r < 0) { r = safe_atou32(rvalue, &k); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse tunnel key ignoring assignment: %s", rvalue); return 0; } } else k = be32toh(buffer.in.s_addr); if (streq(lvalue, "Key")) t->key = k; else if (streq(lvalue, "InputKey")) t->ikey = k; else t->okey = k; return 0; }