# Set to true if this peer is directly connected to a dn42 peer
define is_dn42_peer = true;
# If we are connected directly to dn42, we don't want the dn42 routes from others
define import_dn42 = !is_dn42_peer;
define export_dn42 = is_dn42_peer;

template bgp tnet_tpl {
  local    as 4242423538;
  neighbor internal;

  direct;

  ipv6 {
    next hop self;
    import filter {
      if is_tnet() then {
        accept proto, ": (tnet) import accept, net=", net, ", from=", from, ", gw=", gw;
      } else if import_dn42 && dn42_is_valid_network() then {
        accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
      } else {
        reject proto, ": import reject, reason=not tnet";
      }
    };
    # newer bird's only
    # import keep filtered;
    export filter {
      if is_tnet() then {
        accept proto, ": (tnet) export accept, net=", net, ", from=", from, ", gw=", gw;
      } else if export_dn42 && dn42_is_valid_network() then {
        accept proto, ": (dn42) import accept, net=", net, ", from=", from, ", gw=", gw;
      } else {
        reject proto, ": export reject, reason=not tnet";
      }
    };
  };
}

protocol bgp tnet_hash from tnet_tpl {
  neighbor fe80:a0fd:89e4:42c6:f617:7398:abf4:b516;
  interface "tnet-hash";
  password "{{ bgp_password['astyanax-hash'] }}";
}

protocol bgp tnet_knot from tnet_tpl {
  neighbor fe80:6728:53fc:fc81:40b3:9beb:8336:ba56;
  interface "tnet-knot";
  password "{{ bgp_password['astyanax-knot'] }}";
}