anchor.diff:  -spec rt_entry_info(Node :: node:node_type(), Type :: entry_type(),
                       PredId :: key(), SuccId :: key()) -> rt_entry_info_t().
   rt_entry_info(Node, _Type, _PredId, _SuccId) ->
  -    log:pal("Using grouped FRT-chord"),
       #rt_entry_info{group=case comm:get_ip(pid_dht(Node)) =:= comm:get_ip(comm:this()) of
               true -> same_dc;
               false -> other_dc
  
positive.code: 
  % exports for unit tests
  -export([check_rt_integrity/1, check_well_connectedness/1, get_random_key_from_generator/3]).
  
  %% Make dialyzer stop complaining about unused functions
  
  % The following functions are not used when ?GFRT is not defined. Dialyzer should not
  % complain when they are not called.
  -compile({nowarn_unused_function,
            [{get_num_active_learning_lookups, 1},
             {set_num_active_learning_lookups, 2},
             {inc_num_active_learning_lookups, 1},
             {rt_entry_distance, 2},
             {rt_entry_id, 1},
             {set_custom_info, 2},
             {get_custom_info, 1}]}).
  
  % Functions which are specific to the frt/gfrt implementation
  -export([allowed_nodes/1, frt_check_config/0, rt_entry_info/4]).
  
negative.code: -spec rt_entry_set_node(Entry :: rt_entry(), Node :: mynode()) -> rt_entry().
  rt_entry_set_node(#rt_entry{} = Entry, Node) -> Entry#rt_entry{node=Node}.
  
  % @doc Get all nodes within the routing table
  -spec rt_get_nodes(RT :: rt()) -> [rt_entry()].
  rt_get_nodes(RT) -> gb_trees:values(get_rt_tree(RT)).
  