[Bug] Multiple BFD protocol instances for one VRF should be prohibited

Wang Shanker shankerwangmiao at gmail.com
Sat Oct 10 21:53:57 CEST 2020


Hi, all 

Before commit `f9deedf1`, BFD was implemented allowing only one instance of BFD protocol. The implementation was not prepared for multiple BFD protocol instances. In that commit, to support VRF, the check for multiple BFD instances was removed, which results in the possibility that multiple BFD protocol instances are configured for one VRF. `bfd_add_request()` will success only if given `bfd_proto` and `bfd_request` belong to the same VRF. So for each VRF, only the first BFD protocol instance will take effect. 

This can be reproduced by the following configuration with the latest commit in branch legacy and similar configuration with the latest commit in branch master:

```
router id 192.168.0.1;

protocol bfd bfd1{
        interface "eth0" {
                interval 5s;
                idle tx interval 5s;
        };
};

protocol bfd bfd2{
        interface "eth1" {
                interval 10s;
                idle tx interval 10s;
        };
};

protocol device {
};

protocol static {
        route 2001:db8::/32 multipath
                via fe80::1%eth0 bfd
                via fe80::2%eth1 bfd
        ;
};

```

As shown in `show bfd session`, the configuration in instance `bfd2` is ignored:

```
# ./birdc -s bird6.ctl sh bfd sess bfd1
BIRD 1.6.8 ready.
bfd1:
IP address                Interface  State      Since       Interval  Timeout
fe80::2                   eth1       Down       03:51:32      1.000    0.000
fe80::1                   eth0       Down       03:51:32      5.000    0.000
# ./birdc -s bird6.ctl sh bfd sess bfd2
BIRD 1.6.8 ready.
bfd2:
IP address                Interface  State      Since       Interval  Timeout

```

Expected behavior: I suggest such configuration be seen invalid and rejected when parsed.

Cheers,

Miao Wang


More information about the Bird-users mailing list