Lines Matching +full:use +full:- +full:rtm
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
6 * Redistribution and use in source and binary forms, with or without
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
41 snprintf(vnet_name, sizeof(vnet_name), "vt-%s", atf_tc_get_ident(tc)); in jump_vnet()
44 vnet_switch(vnet_name, c->ifnames, c->num_interfaces); in jump_vnet()
47 c->ifindex = if_nametoindex(c->ifname); in jump_vnet()
60 ret = iface_turn_up(c->ifname); in presetup_ipv6_iface()
61 ATF_REQUIRE_MSG(ret == 0, "Unable to turn up %s", c->ifname); in presetup_ipv6_iface()
63 ret = iface_enable_ipv6(c->ifname); in presetup_ipv6_iface()
64 ATF_REQUIRE_MSG(ret == 0, "Unable to enable IPv6 on %s", c->ifname); in presetup_ipv6_iface()
78 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in presetup_ipv6()
80 c->rtsock_fd = rtsock_setup_socket(); in presetup_ipv6()
97 ret = iface_turn_up(c->ifname); in presetup_ipv4_iface()
98 ATF_REQUIRE_MSG(ret == 0, "Unable to turn up %s", c->ifname); in presetup_ipv4_iface()
113 ret = iface_setup_addr(c->ifname, c->addr4_str, c->plen4); in presetup_ipv4()
116 c->rtsock_fd = rtsock_setup_socket(); in presetup_ipv4()
128 sa_fill_mask4(mask, c->plen4 + 1); in prepare_v4_network()
129 *dst = c->net4; in prepare_v4_network()
130 /* Calculate GW as last-net-address - 1 */ in prepare_v4_network()
131 *gw = c->net4; in prepare_v4_network()
132 …gw->sin_addr.s_addr = htonl((ntohl(c->net4.sin_addr.s_addr) | ~ntohl(c->mask4.sin_addr.s_addr)) - … in prepare_v4_network()
143 sa_fill_mask6(mask, c->plen6 + 1); in prepare_v6_network()
144 *dst = c->net6; in prepare_v6_network()
145 /* Calculate GW as last-net-address - 1 */ in prepare_v6_network()
146 *gw = c->net6; in prepare_v6_network()
148 …gw->sin6_addr._s6_addr32[0] = htonl((ntohl(gw->sin6_addr._s6_addr32[0]) | ~ntohl(c->mask6.sin6_add… in prepare_v6_network()
149 …gw->sin6_addr._s6_addr32[1] = htonl((ntohl(gw->sin6_addr._s6_addr32[1]) | ~ntohl(c->mask6.sin6_add… in prepare_v6_network()
150 …gw->sin6_addr._s6_addr32[2] = htonl((ntohl(gw->sin6_addr._s6_addr32[2]) | ~ntohl(c->mask6.sin6_add… in prepare_v6_network()
151 …gw->sin6_addr._s6_addr32[3] = htonl((ntohl(gw->sin6_addr._s6_addr32[3]) | ~ntohl(c->mask6.sin6_add… in prepare_v6_network()
159 prepare_route_message(struct rt_msghdr *rtm, int cmd, struct sockaddr *dst, in prepare_route_message() argument
163 rtsock_prepare_route_message(rtm, cmd, dst, mask, gw); in prepare_route_message()
166 rtm->rtm_flags |= RTF_STATIC; in prepare_route_message()
170 verify_route_message(struct rt_msghdr *rtm, int cmd, struct sockaddr *dst, in verify_route_message() argument
177 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_type == cmd, in verify_route_message()
179 rtm->rtm_type, rtsock_print_cmdtype(rtm->rtm_type)); in verify_route_message()
180 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_errno == 0, in verify_route_message()
181 "got got errno %d as message reply", rtm->rtm_errno); in verify_route_message()
182 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->_rtm_spare1 == 0, in verify_route_message()
183 "expected rtm_spare==0, got %d", rtm->_rtm_spare1); in verify_route_message()
187 sa = rtsock_find_rtm_sa(rtm, RTA_DST); in verify_route_message()
188 RTSOCK_ATF_REQUIRE_MSG(rtm, sa != NULL, "DST is not set"); in verify_route_message()
190 RTSOCK_ATF_REQUIRE_MSG(rtm, ret != 0, "DST sa diff: %s", msg); in verify_route_message()
194 sa = rtsock_find_rtm_sa(rtm, RTA_NETMASK); in verify_route_message()
195 RTSOCK_ATF_REQUIRE_MSG(rtm, sa != NULL, "NETMASK is not set"); in verify_route_message()
198 RTSOCK_ATF_REQUIRE_MSG(rtm, ret != 0, "NETMASK sa diff: %s", msg); in verify_route_message()
202 sa = rtsock_find_rtm_sa(rtm, RTA_GATEWAY); in verify_route_message()
203 RTSOCK_ATF_REQUIRE_MSG(rtm, sa != NULL, "GATEWAY is not set"); in verify_route_message()
205 RTSOCK_ATF_REQUIRE_MSG(rtm, ret != 0, "GATEWAY sa diff: %s", msg); in verify_route_message()
210 verify_route_message_extra(struct rt_msghdr *rtm, int ifindex, int rtm_flags) in verify_route_message_extra() argument
212 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_index == ifindex, in verify_route_message_extra()
213 "expected ifindex %d, got %d", ifindex, rtm->rtm_index); in verify_route_message_extra()
215 if (rtm->rtm_flags != rtm_flags) { in verify_route_message_extra()
218 rtm->rtm_flags); in verify_route_message_extra()
222 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_flags == rtm_flags, in verify_route_message_extra()
225 rtm->rtm_flags, got_flags); in verify_route_message_extra()
230 verify_link_gateway(struct rt_msghdr *rtm, int ifindex) in verify_link_gateway() argument
235 sa = rtsock_find_rtm_sa(rtm, RTA_GATEWAY); in verify_link_gateway()
236 RTSOCK_ATF_REQUIRE_MSG(rtm, sa != NULL, "GATEWAY is not set"); in verify_link_gateway()
237 RTSOCK_ATF_REQUIRE_MSG(rtm, sa->sa_family == AF_LINK, "GW sa family is %d", sa->sa_family); in verify_link_gateway()
239 RTSOCK_ATF_REQUIRE_MSG(rtm, sdl->sdl_index == ifindex, "GW ifindex is %d", sdl->sdl_index); in verify_link_gateway()
247 struct rt_msghdr *rtm = (struct rt_msghdr *)buffer; \
278 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&c->net4, in ATF_TC_BODY()
279 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
281 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
283 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
293 verify_route_message(rtm, RTM_GET, (struct sockaddr *)&c->net4, in ATF_TC_BODY()
294 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
296 verify_route_message_extra(rtm, c->ifindex, RTF_UP | RTF_DONE | RTF_PINNED); in ATF_TC_BODY()
299 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
300 sa = rtsock_find_rtm_sa(rtm, RTA_GATEWAY); in ATF_TC_BODY()
301 RTSOCK_ATF_REQUIRE_MSG(rtm, sa != NULL, "GATEWAY is not set"); in ATF_TC_BODY()
302 RTSOCK_ATF_REQUIRE_MSG(rtm, sa->sa_family == AF_LINK, "GW sa family is %d", sa->sa_family); in ATF_TC_BODY()
304 RTSOCK_ATF_REQUIRE_MSG(rtm, sdl->sdl_index == c->ifindex, "GW ifindex is %d", sdl->sdl_index); in ATF_TC_BODY()
324 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&c->net4, NULL, NULL); in ATF_TC_BODY()
326 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
328 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
337 verify_route_message(rtm, RTM_GET, (struct sockaddr *)&c->net4, in ATF_TC_BODY()
338 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
340 verify_route_message_extra(rtm, c->ifindex, RTF_UP | RTF_DONE | RTF_PINNED); in ATF_TC_BODY()
365 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
367 rtsock_prepare_route_message(rtm, RTM_GET, NULL, in ATF_TC_BODY()
368 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
369 rtsock_update_rtm_len(rtm); in ATF_TC_BODY()
371 ATF_CHECK_ERRNO(EINVAL, write(c->rtsock_fd, rtm, rtm->rtm_msglen) == -1); in ATF_TC_BODY()
382 DESCRIBE_ROOT_TEST("Tests RTM_GET with prefix with some hosts-bits set"); in ATF_TC_HEAD()
392 rtsock_prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&c->addr4, in ATF_TC_BODY()
393 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
394 rtsock_update_rtm_len(rtm); in ATF_TC_BODY()
397 ATF_CHECK_ERRNO(0, write(c->rtsock_fd, rtm, rtm->rtm_msglen) > 0); in ATF_TC_BODY()
408 DESCRIBE_ROOT_TEST("Tests IPv4 route addition with directly-reachable GW specified by IP"); in ATF_TC_HEAD()
423 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
426 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
427 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
436 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
438 verify_route_message_extra(rtm, c->ifindex, in ATF_TC_BODY()
462 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
464 rtsock_update_rtm_len(rtm); in ATF_TC_BODY()
468 ATF_CHECK_ERRNO(0, write(c->rtsock_fd, rtm, rtm->rtm_msglen) > 0); in ATF_TC_BODY()
489 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
492 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
495 prepare_route_message(rtm, RTM_DELETE, (struct sockaddr *)&net4, in ATF_TC_BODY()
498 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
500 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
509 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&net4, in ATF_TC_BODY()
512 verify_route_message_extra(rtm, c->ifindex, RTF_DONE | RTF_GATEWAY | RTF_STATIC); in ATF_TC_BODY()
534 ret = iface_turn_up(c->ifnames[0]); in ATF_TC_BODY()
535 ATF_REQUIRE_MSG(ret == 0, "Unable to turn up %s", c->ifnames[0]); in ATF_TC_BODY()
536 ret = iface_turn_up(c->ifnames[1]); in ATF_TC_BODY()
537 ATF_REQUIRE_MSG(ret == 0, "Unable to turn up %s", c->ifnames[1]); in ATF_TC_BODY()
539 ret = iface_setup_addr(c->ifnames[0], c->addr4_str, c->plen4); in ATF_TC_BODY()
542 /* Use 198.51.100.0/24 "TEST-NET-2" for the second interface */ in ATF_TC_BODY()
543 ret = iface_setup_addr(c->ifnames[1], "198.51.100.1", 24); in ATF_TC_BODY()
546 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
554 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
557 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
558 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
560 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
565 prepare_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net4, in ATF_TC_BODY()
567 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
569 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
571 verify_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net4, in ATF_TC_BODY()
574 verify_route_message_extra(rtm, if_nametoindex(c->ifnames[1]), in ATF_TC_BODY()
578 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&net4, in ATF_TC_BODY()
581 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
591 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
592 verify_route_message_extra(rtm, if_nametoindex(c->ifnames[1]), in ATF_TC_BODY()
614 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
617 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
618 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
621 prepare_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net4, in ATF_TC_BODY()
623 rtm->rtm_inits |= RTV_MTU; in ATF_TC_BODY()
624 rtm->rtm_rmx.rmx_mtu = test_mtu; in ATF_TC_BODY()
626 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
627 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
629 verify_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net4, in ATF_TC_BODY()
632 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_rmx.rmx_mtu == test_mtu, in ATF_TC_BODY()
633 "expected mtu: %lu, got %lu", test_mtu, rtm->rtm_rmx.rmx_mtu); in ATF_TC_BODY()
636 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&net4, in ATF_TC_BODY()
639 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
640 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
642 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_rmx.rmx_mtu == test_mtu, in ATF_TC_BODY()
643 "expected mtu: %lu, got %lu", test_mtu, rtm->rtm_rmx.rmx_mtu); in ATF_TC_BODY()
664 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
669 rtm->rtm_flags |= test_flags; in ATF_TC_BODY()
670 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
671 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
674 prepare_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net4, in ATF_TC_BODY()
676 rtm->rtm_flags &= ~test_flags; in ATF_TC_BODY()
679 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
680 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
683 verify_route_message_extra(rtm, c->ifindex, desired_flags | RTF_DONE); in ATF_TC_BODY()
686 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&net4, in ATF_TC_BODY()
689 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
690 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
692 verify_route_message_extra(rtm, c->ifindex, desired_flags | RTF_DONE); in ATF_TC_BODY()
699 DESCRIBE_ROOT_TEST("Tests IPv6 global unicast prefix addition with directly-reachable GU GW"); in ATF_TC_HEAD()
714 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
717 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
718 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
727 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
730 verify_route_message_extra(rtm, c->ifindex, in ATF_TC_BODY()
758 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
761 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
764 prepare_route_message(rtm, RTM_DELETE, (struct sockaddr *)&net6, in ATF_TC_BODY()
767 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
768 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
778 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&net6, in ATF_TC_BODY()
780 verify_route_message_extra(rtm, c->ifindex, RTF_DONE | RTF_GATEWAY | RTF_STATIC); in ATF_TC_BODY()
802 ret = iface_turn_up(c->ifnames[0]); in ATF_TC_BODY()
803 ATF_REQUIRE_MSG(ret == 0, "Unable to turn up %s", c->ifnames[0]); in ATF_TC_BODY()
804 ret = iface_turn_up(c->ifnames[1]); in ATF_TC_BODY()
805 ATF_REQUIRE_MSG(ret == 0, "Unable to turn up %s", c->ifnames[1]); in ATF_TC_BODY()
807 ret = iface_enable_ipv6(c->ifnames[0]); in ATF_TC_BODY()
808 ATF_REQUIRE_MSG(ret == 0, "Unable to enable IPv6 on %s", c->ifnames[0]); in ATF_TC_BODY()
809 ret = iface_enable_ipv6(c->ifnames[1]); in ATF_TC_BODY()
810 ATF_REQUIRE_MSG(ret == 0, "Unable to enable IPv6 on %s", c->ifnames[1]); in ATF_TC_BODY()
812 ret = iface_setup_addr(c->ifnames[0], c->addr6_str, c->plen6); in ATF_TC_BODY()
815 ret = iface_setup_addr(c->ifnames[1], "2001:DB8:4242::1", 64); in ATF_TC_BODY()
818 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
826 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
829 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
830 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
832 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
837 prepare_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net6, in ATF_TC_BODY()
839 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
841 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
843 verify_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net6, in ATF_TC_BODY()
846 verify_route_message_extra(rtm, if_nametoindex(c->ifnames[1]), in ATF_TC_BODY()
850 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&net6, in ATF_TC_BODY()
853 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
863 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
864 verify_route_message_extra(rtm, if_nametoindex(c->ifnames[1]), in ATF_TC_BODY()
885 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
889 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
890 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
893 prepare_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net6, in ATF_TC_BODY()
895 rtm->rtm_inits |= RTV_MTU; in ATF_TC_BODY()
896 rtm->rtm_rmx.rmx_mtu = test_mtu; in ATF_TC_BODY()
898 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
899 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
901 verify_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net6, in ATF_TC_BODY()
904 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_rmx.rmx_mtu == test_mtu, in ATF_TC_BODY()
905 "expected mtu: %lu, got %lu", test_mtu, rtm->rtm_rmx.rmx_mtu); in ATF_TC_BODY()
908 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&net6, in ATF_TC_BODY()
911 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
912 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
914 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_rmx.rmx_mtu == test_mtu, in ATF_TC_BODY()
915 "expected mtu: %lu, got %lu", test_mtu, rtm->rtm_rmx.rmx_mtu); in ATF_TC_BODY()
936 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
941 rtm->rtm_flags |= test_flags; in ATF_TC_BODY()
942 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
943 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
946 prepare_route_message(rtm, RTM_CHANGE, (struct sockaddr *)&net6, in ATF_TC_BODY()
948 rtm->rtm_flags &= ~test_flags; in ATF_TC_BODY()
951 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
952 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
955 verify_route_message_extra(rtm, c->ifindex, desired_flags | RTF_DONE); in ATF_TC_BODY()
958 prepare_route_message(rtm, RTM_GET, (struct sockaddr *)&net6, in ATF_TC_BODY()
961 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
962 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
964 verify_route_message_extra(rtm, c->ifindex, desired_flags | RTF_DONE); in ATF_TC_BODY()
985 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net4, in ATF_TC_BODY()
991 rtm->rtm_rmx.rmx_expire = tv.tv_sec - 1; in ATF_TC_BODY()
992 rtm->rtm_inits |= RTV_EXPIRE; in ATF_TC_BODY()
994 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
995 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
996 ATF_REQUIRE_MSG(rtm != NULL, "unable to get rtsock reply for RTM_ADD"); in ATF_TC_BODY()
997 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_inits & RTV_EXPIRE, "RTV_EXPIRE not set"); in ATF_TC_BODY()
1000 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1002 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&net4, in ATF_TC_BODY()
1005 verify_route_message_extra(rtm, c->ifindex, in ATF_TC_BODY()
1017 DESCRIBE_ROOT_TEST("Tests IPv6 global unicast prefix addition with directly-reachable GU GW"); in ATF_TC_HEAD()
1032 prepare_route_message(rtm, RTM_ADD, (struct sockaddr *)&net6, in ATF_TC_BODY()
1038 rtm->rtm_rmx.rmx_expire = tv.tv_sec - 1; in ATF_TC_BODY()
1039 rtm->rtm_inits |= RTV_EXPIRE; in ATF_TC_BODY()
1041 rtsock_send_rtm(c->rtsock_fd, rtm); in ATF_TC_BODY()
1042 rtm = rtsock_read_rtm_reply(c->rtsock_fd, buffer, sizeof(buffer), rtm->rtm_seq); in ATF_TC_BODY()
1043 ATF_REQUIRE_MSG(rtm != NULL, "unable to get rtsock reply for RTM_ADD"); in ATF_TC_BODY()
1044 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_inits & RTV_EXPIRE, "RTV_EXPIRE not set"); in ATF_TC_BODY()
1047 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1049 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&net6, in ATF_TC_BODY()
1052 verify_route_message_extra(rtm, c->ifindex, in ATF_TC_BODY()
1072 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1074 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in ATF_TC_BODY()
1082 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1083 if ((rtm->rtm_type == RTM_ADD) && ((rtm->rtm_flags & RTF_LLINFO) == 0)) in ATF_TC_BODY()
1088 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&c->addr6, NULL, NULL); in ATF_TC_BODY()
1089 rtsock_validate_pid_kernel(rtm); in ATF_TC_BODY()
1091 RTSOCK_ATF_REQUIRE_MSG(rtm, rtsock_find_rtm_sa(rtm, RTA_NETMASK) == NULL, "netmask is set"); in ATF_TC_BODY()
1094 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
1097 verify_route_message_extra(rtm, if_nametoindex("lo0"), expected_rt_flags); in ATF_TC_BODY()
1109 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1111 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in ATF_TC_BODY()
1121 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1122 /* Find RTM_ADD with netmask - this should skip both host route and LLADDR */ in ATF_TC_BODY()
1123 if ((rtm->rtm_type == RTM_ADD) && (rtsock_find_rtm_sa(rtm, RTA_NETMASK))) in ATF_TC_BODY()
1128 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&c->net6, in ATF_TC_BODY()
1129 (struct sockaddr *)&c->mask6, NULL); in ATF_TC_BODY()
1132 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
1135 verify_route_message_extra(rtm, c->ifindex, expected_rt_flags); in ATF_TC_BODY()
1147 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1149 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in ATF_TC_BODY()
1165 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1168 if (rtm->rtm_type == RTM_NEWADDR) { in ATF_TC_BODY()
1174 /* Find RTM_ADD with netmask - this should skip both host route and LLADDR */ in ATF_TC_BODY()
1175 if ((rtm->rtm_type == RTM_ADD) && (rtsock_find_rtm_sa(rtm, RTA_NETMASK))) { in ATF_TC_BODY()
1181 if ((rtm->rtm_type == RTM_ADD) && ((rtm->rtm_flags & RTF_LLDATA) == 0)) { in ATF_TC_BODY()
1187 RLOG("skipping msg type %s, try: %d", rtsock_print_cmdtype(rtm->rtm_type), in ATF_TC_BODY()
1205 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in ATF_TC_BODY()
1207 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1209 ret = iface_delete_addr(c->ifname, c->addr6_str); in ATF_TC_BODY()
1212 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1213 if ((rtm->rtm_type == RTM_DELETE) && in ATF_TC_BODY()
1214 ((rtm->rtm_flags & RTF_LLINFO) == 0) && in ATF_TC_BODY()
1215 rtsock_find_rtm_sa(rtm, RTA_NETMASK) == NULL) in ATF_TC_BODY()
1220 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&c->addr6, NULL, NULL); in ATF_TC_BODY()
1221 rtsock_validate_pid_kernel(rtm); in ATF_TC_BODY()
1223 RTSOCK_ATF_REQUIRE_MSG(rtm, rtsock_find_rtm_sa(rtm, RTA_NETMASK) == NULL, "netmask is set"); in ATF_TC_BODY()
1226 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
1230 RTSOCK_ATF_REQUIRE_MSG(rtm, rtm->rtm_flags == expected_rt_flags, in ATF_TC_BODY()
1231 "expected rtm flags: 0x%X, got 0x%X", expected_rt_flags, rtm->rtm_flags); in ATF_TC_BODY()
1243 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in ATF_TC_BODY()
1245 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1247 ret = iface_delete_addr(c->ifname, c->addr6_str); in ATF_TC_BODY()
1250 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1251 /* Find RTM_DELETE with netmask - this should skip both host route and LLADDR */ in ATF_TC_BODY()
1252 if ((rtm->rtm_type == RTM_DELETE) && (rtsock_find_rtm_sa(rtm, RTA_NETMASK))) in ATF_TC_BODY()
1257 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&c->net6, in ATF_TC_BODY()
1258 (struct sockaddr *)&c->mask6, NULL); in ATF_TC_BODY()
1261 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
1264 verify_route_message_extra(rtm, c->ifindex, expected_rt_flags); in ATF_TC_BODY()
1276 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1278 ret = iface_setup_addr(c->ifname, c->addr6_str, c->plen6); in ATF_TC_BODY()
1287 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1288 /* Find RTM_ADD with netmask - this should skip both host route and LLADDR */ in ATF_TC_BODY()
1289 if ((rtm->rtm_type == RTM_ADD) && (rtsock_find_rtm_sa(rtm, RTA_NETMASK))) in ATF_TC_BODY()
1294 verify_route_message(rtm, RTM_ADD, (struct sockaddr *)&c->net4, in ATF_TC_BODY()
1295 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
1298 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
1301 verify_route_message_extra(rtm, c->ifindex, expected_rt_flags); in ATF_TC_BODY()
1313 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1315 ret = iface_setup_addr(c->ifname, c->addr4_str, c->plen4); in ATF_TC_BODY()
1330 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1333 if (rtm->rtm_type == RTM_NEWADDR) { in ATF_TC_BODY()
1339 /* Find RTM_ADD with netmask - this should skip both host route and LLADDR */ in ATF_TC_BODY()
1340 if ((rtm->rtm_type == RTM_ADD) && (rtsock_find_rtm_sa(rtm, RTA_NETMASK))) { in ATF_TC_BODY()
1346 RLOG("skipping msg type %s, try: %d", rtsock_print_cmdtype(rtm->rtm_type), in ATF_TC_BODY()
1365 ret = iface_setup_addr(c->ifname, c->addr4_str, c->plen4); in ATF_TC_BODY()
1367 c->rtsock_fd = rtsock_setup_socket(); in ATF_TC_BODY()
1369 ret = iface_delete_addr(c->ifname, c->addr4_str); in ATF_TC_BODY()
1372 rtm = rtsock_read_rtm(c->rtsock_fd, buffer, sizeof(buffer)); in ATF_TC_BODY()
1373 /* Find RTM_ADD with netmask - this should skip both host route and LLADDR */ in ATF_TC_BODY()
1374 if ((rtm->rtm_type == RTM_DELETE) && (rtsock_find_rtm_sa(rtm, RTA_NETMASK))) in ATF_TC_BODY()
1379 verify_route_message(rtm, RTM_DELETE, (struct sockaddr *)&c->net4, in ATF_TC_BODY()
1380 (struct sockaddr *)&c->mask4, NULL); in ATF_TC_BODY()
1383 verify_link_gateway(rtm, c->ifindex); in ATF_TC_BODY()
1386 verify_route_message_extra(rtm, c->ifindex, expected_rt_flags); in ATF_TC_BODY()