<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Hi everyone,<br><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Comments inline.<br>


</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jul 21, 2014 at 2:29 PM, Ondrej Zajicek <span dir="ltr"><<a href="mailto:santiago@crfreenet.org" target="_blank">santiago@crfreenet.org</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Sun, Jul 20, 2014 at 12:05:39PM +0200, Eloi Carbó Solé wrote:<br>
> Hi everyone,<br>
><br>
> I am Eloi Carbó, a student from the UPC in Catalonia, doing a Google Summer<br>
> of Code [0] with the QMP project [1] team, and the support of Guifi.net [2]<br>
> and BMX6 [3] developers and under the scope of Freifunk [4].<br>
><br>
> I would like to inform you that we are bringing UCI and LUCI configuration<br>
> support to Bird4 (now) and Bird6 (ASAP) putting our efforts on BGP routing.<br>
<br>
</div>Hello<br>
<br>
It would be nice to have UCI configuration in OpenWRT for BIRD. Although<br>
I am not sure how filters could be usefully represented in UCI and these<br>
are pretty important in most nontrivial BGP configs.<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Filters (and functions) have already been discussed and I am going to implement them in files (ie: {path}/filters/Filter-Name) because, as you have already said, they have a complex structure that do not fit in UCI. These files will have the actual syntax of filters in Bird and will be included during the execution of init.d script. Filters and functions will be implemented soon.<br>


</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I would suggest to keep structure of UCI BIRD configs consistent with<br>
native BIRD configs. Although BIRD sometimes uses multiple nesting and i<br>
am not sure whether UCI can represent that. Also, please use same option<br>
names (when possible) with underscore separator for space instead of<br>
camelCase (e.g. scan_time instead of scanTime). That would be consistent<br>
with both UCI style and BIRD style.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​I was following the same naming UCI scheme than in my previous project with UCI but I can surelly change this naming to a_b. I attach you in the final of the mail a piratepad with an example applying the changes you asked.<br>

</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Some comments to /etc/config/bird4:<br>
<br>
config bird 'bird'<br>
    option useUCIconfig '0'<br>
        #Caution! Enabling this option, Bird will translate this<br>
        #UCI file and use it instead of /etc/bird4.conf<br>
    option UCIconfigFile '/tmp/bird4.conf'<br>
<br>
Perhaps '/var/etc/bird4.conf' as default ?<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​The configuration is created by init.d script and copied to /tmp which is in RAM following the OpenWRT working methodology.<br>

</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
config global 'global'<br>
    option logFile '/tmp/bird.log'<br>
<br>
Default configuration should probably use syslog instead of logfile.<br>
 </blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​There is no​ syslog in OpenWRT and for that reason I am using log files in RAM (again, user can modify this directory).<br>

</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    option log 'all'<br>
    option debug 'all'<br>
<br>
'debug all' is not a good default value. That would generate tons of log<br>
messages.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">I will change it in the next commit using 'off' following the default value in the documentation.<br></div>

<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    option table 'arf'<br>
<br>
'table' should not be a global option, more like one section for each table<br>
(although there is just one option 'sorted' and tables currently do not<br>
have block for options in BIRD config, but that will change in the future).<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">This was a mistake. As you say, there can be 'N' table routes so, using the 'option table', only one extra table could be created. Find in my attach to piratepad the modifications done.<br>

</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
config kernel kernel1<br>
    option tablePriority '100'<br>
<br>
This is misnomer. It is not a table priority, just a kernel table ID.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Yes, it was a mistake naming the option. Changed!<br></div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
config device device1<br>
    option scanTime '10'<br>
    #list primaryIface 'eth0:192.168.1.1'<br>
    #list primary '<a href="http://192.168.0.0/16" target="_blank">192.168.0.0/16</a>'<br>
<br>
You may ignore 'primary' device option. It is mostly deprecated and not<br>
much useful.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Changed. Then scan_time is the only one option available for this protocol? ​</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
config bgp bgp1<br>
    option table 'arf'<br>
    option import 'all'<br>
    option export 'all'<br>
    option as '65001'<br>
    option disabled '0'<br>
<br>
config neighbor<br>
    option type 'bgp'<br>
    option instance 'bgp1'<br>
    option addr '172.16.1.5'<br>
    option as '65530'<br>
<br>
In BIRD, we don't have separate neighbors as subsections of BGP. We have<br>
one BGP instance per neighbor (also with separate protocol name). UCI<br>
structure should probably reflect that too. If you want common options<br>
for multiple BGP neighbors, you could use protocol templates for BGP:<br>
<br>
<div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0);display:inline">​​</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0);display:inline">​​</div>config bgp_template bgp_common<br>


    option table 'arf'<br>
    option import 'all'<br>
    option export 'all'<br>
    option locas_address '172.16.1.1'<br>
    option local_as '65001'<br>
<br>
<div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0);display:inline">​​</div>config bgp bgp1<br>
    option template 'bgp_common'<br>
    option neighbor_address '172.16.1.5'<br>
    option neighbor_as '65530'<br>
<br></blockquote><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">I was going to implement templates later but your idea makes sense and I will adopt it instead of the actual one. The reason of having neighbors as sections was to treat them apart, as they may be used for bgp or ospf.<br>

</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> 
<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
config route<br>
    option instance 'static1'<br>
    option type 'general'<br>
    option addr '<a href="http://192.168.9.0/24" target="_blank">192.168.9.0/24</a>'<br>
    list via '10.99.105.159'<br>
<br>
Perhaps not use 'list' but 'option' for 'via' in this case.<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">This was a mistake. Changed!​</div>

<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Type should be 'router' which should be default type.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​The problem with 'route's is that there are 5 different types so I had to name somehow them. If there is a specific naming for them besides the 'general->router' but this naming will be hidden to the user, as it is only a internal init.d configuration value. Users will see <a href="http://piratepad.net/Rfmb8nXiRp">this Piratepad</a>.<br>

</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
option 'addr' should be named 'prefix' instead.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​Changed!<br></div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
config route<br>
    option instance 'static1'<br>
    option type 'special'<br>
    option addr '<a href="http://192.168.2.0/24" target="_blank">192.168.2.0/24</a>'<br>
    option attribute 'unreachable'<br>
<br>
It is unnecessary to use separate 'attribute' option. You could use<br>
'unreachable', 'blackhole' and 'prohibit' as route types.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">The type option is used by the init.d configuration to differentiate with the 5 different routes: <br><br>'general->router' which have only a prefix and ip.<br>

</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">'multipath' with a list of 'via's, some with weight.<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">

'special' with an attribute (as in documentation: blackhole|unreachable|prohibit). Following your idea, I would have 4 + 3 new types.<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">

'iface' with a prefix and interface.<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">'recursive' only with an IP.</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">

<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
config route<br>
    option instance 'static1'<br>
    option type 'multipath'<br>
    option addr '<a href="http://192.168.30.0/24" target="_blank">192.168.30.0/24</a>'<br>
    list via '172.16.1.5'<br>
    list via '172.16.1.6'<br>
    list viaWeight '<a href="http://172.16.1.2:70" target="_blank">172.16.1.2:70</a>'<br>
<br>
Weight attribute is probably not important enough to implement it with<br>
such ugly syntax.<br>
<br></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​I understand correctly that you do not like the naming or maybe that is an unused option that could be left for the moment?<br>

</div><br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
For /etc/init.d/bird4, please use 'case' instead of 'if/elif' sequences.<br>
<span><font color="#888888"><br></font></span></blockquote><div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​I was following some OpenWRT packages using UCI as examples and they used if/elseif. I can change it to 'case' for sure.<br>

</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><font color="#888888">
<br>
--<br>
Elen sila lumenn' omentielvo<br>
<br>
Ondrej 'Santiago' Zajicek (email: <a href="mailto:santiago@crfreenet.org" target="_blank">santiago@crfreenet.org</a>)<br>
OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, <a href="http://wwwkeys.pgp.net" target="_blank">wwwkeys.pgp.net</a>)<br>
"To err is human -- to blame it on a computer is even more so."<br>
</font></span></blockquote></div><br><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​To sum up, many thanks for your feedback, it is really appreciated. As I told, here it is a <a href="http://piratepad.net/xOaveQLlyh">Piratepad</a> with an example of a proposed configuration. Feel free to make changes or comments in the document and, if you find it correct, I will start to fix the init.d script to fit in it. <br>

<br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Best regards,​</div><br><br><br clear="all"><br>-- <br><div dir="ltr">Eloi Carbó</div>
</div></div>