bool pim_groupconf_node::rp_for_group(const in6_addr &grpaddr, in6_addr &rpaddr, rp_source &src) const { bool R_bit = grpaddr.s6_addr[1] & 0x40; bool P_bit = grpaddr.s6_addr[1] & 0x20; bool T_bit = grpaddr.s6_addr[1] & 0x10; if (P_bit && T_bit && R_bit) { /* Embedded-RP address */ inet6_addr tmp; pim_group_node::calculate_embedded_rp_addr(grpaddr, tmp); rpaddr = tmp; src = rps_embedded; return true; } rpaddr = get_property_address("rp"); if (!IN6_IS_ADDR_UNSPECIFIED(&rpaddr)) { src = rps_static; return true; } #ifndef PIM_NO_BSR rpaddr = pim->bsr().rp_from_rpset(grpaddr); if (!IN6_IS_ADDR_UNSPECIFIED(&rpaddr)) { src = rps_rp_set; return true; } #endif return false; }
static void debug_print_object(int number) { int i; zword_t addr, len; glk_printf("Object %d:\nName: \"", number); print_object_name(number); glk_put_string("\"\nAttributes: "); for (i = 0; i < (zGameVersion < Z_VERSION_4 ? 32 : 48); i++) { if (get_attribute(number, i)) glk_printf("%d ", i); } glk_printf("\nParent: %3d \"", object_parent(number)); print_object_name(object_parent(number)); glk_printf("\"\nSibling: %3d \"", object_sibling(number)); print_object_name(object_sibling(number)); glk_printf("\"\nChild: %3d \"", object_child(number)); print_object_name(object_child(number)); glk_put_string("\"\nProperties:\n"); i = 0; while (i = get_next_property(number, i)) { glk_printf(" [%2d] ", i); addr = get_property_address(number, i); for (len = get_property_length(addr); len > 0; len--) glk_printf("%02x ", get_byte(addr++)); glk_put_string("\n"); } }