constant not available everywhere and passing variables from protocols
Jan Maria Matejka
jan.matejka at nic.cz
Wed Mar 21 11:13:44 CET 2018
On 03/21/2018 10:00 AM, Saku Ytti wrote:
> My config:
>
> define local_ip = 129.250.14.127;
> define default_candidate_net = 129.250.0.0/16;
> define default_candidate_ip = 129.250.0.0;
> define default_net = 0.0.0.0/0;
> include "common.conf";
>
> protocol static {
> route 0.0.0.0/0 recursive default_candidate_ip;
> }
>
> # ens192
> protocol bgp active from NTT {
> neighbor 204.141.224.0;
> }
>
> # ens 224
> protocol bgp backup from NTT {
> neighbor 204.141.224.2;
> }
>
>
> 1) constant not available everywhere
>
> a) this works
> - define default_candidate_ip = 129.250.0.0;
> - route 0.0.0.0/0 recursive default_candidate_ip;
>
> b) this does not
> - define default_route = 0.0.0.0/0;
> - route default_route recursive 129.250.0.0;
>
> Why not? It barfs with 'line 10: IP address expected'
In v1.6.x, nobody implemented it. In v2, it should work.
> 2) passing variables from protocols
>
> I'm thinking how to tell which neighbour is backup which is primary. My thoughts
>
> a) 'import (backup, bgp_in)
> => no way to define >1 filter?
>
> b) 'bool backup = true'
> => no way to set variables in protocols
>
> c) 'define backup = true'
> => no way to set constants in protocols
>
> d) ''import bgp_in(true)'
> => no way to pass variables to filters
>
> I resorted to matching to protocol name, and call the backup group
> backup. But I'd really prefer way to give neighbour or protocol some
> information I can use in filter to discriminate.
Try 'import where yourCustomImportFunction(arg1, arg2, arg3, ... argN)'.
> Are constants considered strings? If so, should the strings have some
> methods, like split, sub, []? I bit needlessly need to define
> 129.250.0.0 and 129.250.0.0/16 as one is used as static route next-hop
> another is used as filter to permit prefix. I could just maybe say
> 'default_candidate_net.split('/')[0]'.
Try 'default_candidate_net.ip' and 'default_candidate_net.len'. Both of them
are available only in filters.
Anyway, it should be possible to 'define default_candidate_ip = default_candidate_net.ip;'
and then use the constant as IP.
M.
More information about the Bird-users
mailing list