ssize_t hncp_io_sendto(hncp o, void *buf, size_t len, const char *ifname, const struct in6_addr *dst) { if (check_send) { sput_fail_unless(o, "hncp"); sput_fail_unless(o && o->udp_socket == 1, "hncp_io ready"); smock_pull_string_is("sendto_ifname", ifname); struct in6_addr *e_dst = smock_pull("sendto_dst"); sput_fail_unless(e_dst && memcmp(e_dst, dst, sizeof(*dst)) == 0, "dst match"); /* Two optional verification steps.. */ if (_smock_get_queue("sendto_len", false)) { int r_len = smock_pull_int("sendto_len"); sput_fail_unless(r_len == (int) len, "len"); } if (_smock_get_queue("sendto_buf", false)) { unsigned char *r = smock_pull("sendto_buf"); sput_fail_unless(memcmp(r, buf, len), "buf"); } return smock_pull_int("sendto_return"); } else { want_send++; return 1; } }
bool hncp_io_set_ifname_enabled(hncp o, const char *ifname, bool enabled) { sput_fail_unless(o, "hncp"); sput_fail_unless(o && o->udp_socket == 1, "hncp_io ready"); smock_pull_string_is("set_enable_ifname", ifname); smock_pull_bool_is("set_enable_enabled", enabled); return smock_pull_bool("set_enable_result"); }
ssize_t hncp_io_recvfrom(hncp o, void *buf, size_t len, char *ifname, struct in6_addr *src, struct in6_addr *dst) { unsigned char *r = smock_pull("recvfrom_buf"); int r_len = smock_pull_int("recvfrom_len"); struct in6_addr *r_src = smock_pull("recvfrom_src"); struct in6_addr *r_dst = smock_pull("recvfrom_dst"); smock_pull_string_is("recvfrom_ifname", ifname); sput_fail_unless(o, "hncp"); sput_fail_unless(o && o->udp_socket == 1, "hncp_io_schedule valid"); sput_fail_unless(r_len <= ((int) len), "result length reasonable"); *src = *r_src; *dst = *r_dst; memcpy(buf, r, r_len); return r_len; }
void dncp_ext_ep_ready(dncp_ep ep, bool ready) { smock_pull_string_is("dncp_ready", ep->ifname); smock_pull_bool_is("dncp_ready_value", ready); }