BIRD 3 thread group configuration syntax
Hello, According to the docs for v3.1.2 and v3.1.1: https://bird.nic.cz/doc/bird-3.1.2.html#global-opts *Thread setup* [..] Thread groups are configured by writing thread group /name /{} blocks, which contain the following options: threads /number/ default /bool/ /[...]/ It also notes the following: There is also a "simple" thread group setting. If you write *threads */number/ on top level, it is equivalent to setting the worker group thread count to that number, and the express group thread count to one. This setting is deprecated and may disappear in some future version. So.. now I come to setting up a new server, I thought I'd better try to use this "new" config style. But whatever I try doesn't seem to work. I've tried various iterations of: thread group worker { threads 1; } --> <FATAL> /etc/bird/bird.conf:55:10 No default thread group configured thread group worker { default; threads 1; } --> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected THREADS, expecting '}' thread group worker { threads 1; default yes; } --> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected DEFAULT, expecting '}' thread group worker { threads 1; default; } --> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected DEFAULT, expecting '}' Weirdly, if I configure only "default;" with no other options, it accepts the config: thread group worker { default; } root@rc01:/# /usr/local/sbin/bird -c /etc/bird/bird.conf -p root@rc01:/# If I add the (deprecated) top-level "threads", it complains I've got them both configured: threads 1; thread group worker { default; threads 1; } --> <FATAL> /etc/bird/bird.conf:41:14 Mixing of `threads NUM` and `threads worker {}` is not allowed. As soon as I try any other config options, it doesn't accept it: thread group worker { default; wakeup time 31415 s; } --> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected WAKEUP, expecting '}' Also tried: thread group { worker { threads 1; default; }; } --- - nope. thread group worker { threads 1; } thread group express { threads 1; } --> <FATAL> /etc/bird/bird.conf:45:14 syntax error, unexpected EXPRESS, expecting CF_SYM_KNOWN or CF_SYM_UNDEFINED --- thread group worker { threads 2; default; } --> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected DEFAULT, expecting '}' --- thread worker { threads 2; default; } --> <FATAL> /etc/bird/bird.conf:41:8 syntax error, unexpected CF_SYM_UNDEFINED, expecting GROUP So, it seems the "default" option must be present, but if I add /any /other option, it doesn't accept it. Oddly, if I put another option before default, it doesn't complain about that, but instead complains about "default" being there. I tried various 3.x versions 3.1.1, 3.1.2 and a couple of recent branches from git repo. As for the config - I just have the default bird.conf which ships with the BIRD debian package, and I've added the thread group option somewhere near the top. Any hints on the correct config would be appreciated. Or is this maybe a bug? Thanks! Rob -- Rob Lister rob@lonap.net +44 20 3137 8330
Hello Robert, you are totally right! We investigated this for a bit and found that due to our oversight in the grammar of the config, it was only possible to write a *single* option in the thread group block. It should be fixed on a branch here: https://gitlab.nic.cz/labs/bird/-/tree/dp-fix-thead-group-conf?ref_type=head... We will try to back-port this patch to v3.1 so hopefully it will land in v3.1.3. Thanks a lot for the bug report! Have a good rest of the week, David David Petera (he/him) | BIRD Tech Support | CZ.NIC, z.s.p.o. On 8/21/25 21:16, Robert Lister wrote:
Hello,
According to the docs for v3.1.2 and v3.1.1:
https://bird.nic.cz/doc/bird-3.1.2.html#global-opts
*Thread setup* [..]
Thread groups are configured by writing thread group /name /{} blocks, which contain the following options:
threads /number/ default /bool/ /[...]/
It also notes the following:
There is also a "simple" thread group setting. If you write *threads */number/ on top level, it is equivalent to setting the worker group thread count to that number, and the express group thread count to one. This setting is deprecated and may disappear in some future version.
So.. now I come to setting up a new server, I thought I'd better try to use this "new" config style. But whatever I try doesn't seem to work. I've tried various iterations of:
thread group worker { threads 1; }
--> <FATAL> /etc/bird/bird.conf:55:10 No default thread group configured
thread group worker { default; threads 1; }
--> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected THREADS, expecting '}'
thread group worker { threads 1; default yes; }
--> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected DEFAULT, expecting '}'
thread group worker { threads 1; default; }
--> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected DEFAULT, expecting '}'
Weirdly, if I configure only "default;" with no other options, it accepts the config:
thread group worker { default; }
root@rc01:/# /usr/local/sbin/bird -c /etc/bird/bird.conf -p root@rc01:/#
If I add the (deprecated) top-level "threads", it complains I've got them both configured:
threads 1;
thread group worker { default; threads 1; }
--> <FATAL> /etc/bird/bird.conf:41:14 Mixing of `threads NUM` and `threads worker {}` is not allowed.
As soon as I try any other config options, it doesn't accept it:
thread group worker { default; wakeup time 31415 s; }
--> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected WAKEUP, expecting '}'
Also tried:
thread group { worker { threads 1; default; }; }
---
- nope.
thread group worker { threads 1; }
thread group express { threads 1; }
--> <FATAL> /etc/bird/bird.conf:45:14 syntax error, unexpected EXPRESS, expecting CF_SYM_KNOWN or CF_SYM_UNDEFINED
---
thread group worker { threads 2; default; }
--> <FATAL> /etc/bird/bird.conf:43:2 syntax error, unexpected DEFAULT, expecting '}'
---
thread worker { threads 2; default; }
--> <FATAL> /etc/bird/bird.conf:41:8 syntax error, unexpected CF_SYM_UNDEFINED, expecting GROUP
So, it seems the "default" option must be present, but if I add /any /other option, it doesn't accept it. Oddly, if I put another option before default, it doesn't complain about that, but instead complains about "default" being there.
I tried various 3.x versions 3.1.1, 3.1.2 and a couple of recent branches from git repo.
As for the config - I just have the default bird.conf which ships with the BIRD debian package, and I've added the thread group option somewhere near the top.
Any hints on the correct config would be appreciated. Or is this maybe a bug?
Thanks!
Rob
-- Rob Lister rob@lonap.net +44 20 3137 8330
participants (2)
-
David Petera -
Robert Lister