Hello

Here is the patch that adds a package for The BIRD Internet Routing
Daemon. It is updated to the current version of BIRD (v 1.2.2).

BIRD is an internet routing daemon that implements OSPF, RIP and BGP.
It is fast, lightweight and small (cca 300 kB), therefore ideal for
OpenWRT based routers.

The makefile is rather tricky, as BIRD have to be built two times  (for
IPv4 and IPv6 versions) and there are separate packages for BIRD daemon
and BIRD client, because client depends on libreadline and is not
strictly necessary.

Signed-off-by: Ondrej Zajicek <santi...@crfreenet.org>

---

diff -uprN packages-/net/bird/Makefile packages/net/bird/Makefile
--- packages-/net/bird/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/Makefile  2010-04-10 12:35:02.000000000 +0200
@@ -0,0 +1,149 @@
+# 
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bird
+PKG_VERSION:=1.2.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird
+PKG_MD5SUM:=8eafe82ce74bbf643283a758fb01279a
+PKG_BUILD_DEPENDS:=libncurses libreadline
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bird/Default
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=The BIRD Internet Routing Daemon
+  URL:=http://bird.network.cz/
+endef
+
+define Package/birdc/Default
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=The BIRD command-line client
+  URL:=http://bird.network.cz/
+  DEPENDS:= +libreadline +libncurses
+endef
+
+define Package/bird/Default/description1
+BIRD is an internet routing daemon which manages TCP/IP routing tables
+with support of modern routing protocols, easy to use configuration
+interface and powerful route filtering language. It is lightweight and
+efficient and therefore appropriate for small embedded routers.
+
+endef
+
+define Package/bird/Default/description2
+In BGP, BIRD supports communities, multiprotocol extensions, MD5
+authentication, 32bit AS numbers and could act as a route server or a
+route reflector. BIRD also supports multiple RIBs, multiple kernel
+routing tables and redistribution between the protocols with a powerful
+configuration syntax.
+
+endef
+
+define Package/bird/Default/description3
+This is a BIRD command-line client. It is used to send commands to BIRD,
+commands can perform simple actions such as enabling/disabling of
+protocols, telling BIRD to show various information, telling it to show
+a routing table filtered by a filter, or asking BIRD to reconfigure.
+
+Unless you can't afford dependency on ncurses and readline, you
+should install BIRD command-line client together with BIRD.
+
+endef
+
+define Package/bird4
+$(call Package/bird/Default)
+  TITLE+= (IPv4)
+endef
+
+define Package/birdc4
+$(call Package/birdc/Default)
+  TITLE+= (IPv4)
+  DEPENDS+= +bird4
+endef
+
+define Package/bird6
+$(call Package/bird/Default)
+  TITLE+= (IPv6)
+endef
+
+define Package/birdc6
+$(call Package/birdc/Default)
+  TITLE+= (IPv6)
+  DEPENDS+= +bird6
+endef
+
+define Package/bird4/description
+$(call Package/bird/Default/description1)
+This is IPv4 version of BIRD, it supports OSPFv2, RIPv2 and BGP
+protocols.
+
+$(call Package/bird/Default/description2)
+endef
+
+define Package/birdc4/description
+$(call Package/bird/Default/description1)
+$(call Package/bird/Default/description3)
+endef
+
+define Package/bird6/description
+$(call Package/bird/Default/description1)
+This is IPv6 version of BIRD, it supports OSPFv3, RIPng and BGP
+protocols.
+
+$(call Package/bird/Default/description2)
+endef
+
+define Package/birdc6/description
+$(call Package/bird/Default/description1)
+$(call Package/bird/Default/description3)
+endef
+
+CONFIGURE_ARGS += --with-linux-headers="$(LINUX_DIR)"
+
+define Build/Template
+
+$(STAMP_BUILT)-$(2): $(STAMP_PREPARED)
+       $(call Build/Configure/Default,$(3))
+       $(call Build/Compile/Default,)
+       ( cd $(PKG_BUILD_DIR); mv -f bird bird$(2); mv -f birdc birdc$(2) )
+       -$(MAKE) -C $(PKG_BUILD_DIR) clean
+       touch $$@
+
+$(STAMP_BUILT): $(STAMP_BUILT)-$(2)
+
+define Package/bird$(2)/install
+       $(INSTALL_DIR)  $$(1)/usr/sbin
+       $(INSTALL_BIN)  $$(PKG_BUILD_DIR)/bird$(2) $$(1)/usr/sbin/
+       $(INSTALL_BIN)  ./files/bird$(2)loop $$(1)/usr/sbin/
+       $(INSTALL_DIR)  $$(1)/etc
+       $(INSTALL_DATA) ./files/bird$(2).conf $$(1)/etc/
+       $(INSTALL_DIR)  $$(1)/etc/init.d
+       $(INSTALL_BIN)  ./files/bird$(2).init $$(1)/etc/init.d/bird$(2)
+
+endef
+
+define Package/birdc$(2)/install
+       $(INSTALL_DIR) $$(1)/usr/sbin
+       $(INSTALL_BIN) $$(PKG_BUILD_DIR)/birdc$(2) $$(1)/usr/sbin/
+endef
+
+endef
+
+
+$(eval $(call Build/Template,bird4,4, --disable-ipv6))
+$(eval $(call Build/Template,bird6,6, --enable-ipv6))
+
+$(eval $(call BuildPackage,bird4))
+$(eval $(call BuildPackage,birdc4))
+$(eval $(call BuildPackage,bird6))
+$(eval $(call BuildPackage,birdc6))
diff -uprN packages-/net/bird/files/bird4.conf 
packages/net/bird/files/bird4.conf
--- packages-/net/bird/files/bird4.conf 1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/files/bird4.conf  2010-04-10 11:52:05.000000000 +0200
@@ -0,0 +1,121 @@
+
+# THIS CONFIG FILE IS NOT A COMPLETE DOCUMENTATION
+# PLEASE LOOK IN THE BIRD DOCUMENTATION FOR MORE INFO
+
+# However, most of options used here are just for example
+# and will be removed in real-life configs.
+
+log syslog all;
+
+# Override router ID
+#router id 192.168.0.1;
+
+# Turn on global debugging of all protocols
+#debug protocols all;
+
+
+# Define a route filter...
+# filter test_filter {
+#      if net ~ 10.0.0.0/16 then accept;
+#      else reject;
+# }
+
+# The direct protocol automatically generates device routes to all network
+# interfaces. Can exist in as many instances as you wish if you want to
+# populate multiple routing tables with device routes. Because device routes
+# are handled by Linux kernel, this protocol is  usually not needed.
+# protocol direct {
+#      interface "*";  # Restrict network interfaces it works with
+# }
+
+# This pseudo-protocol performs synchronization between BIRD's routing
+# tables and the kernel. You can run multiple instances of the kernel
+# protocol and synchronize different kernel tables with different BIRD tables.
+protocol kernel {
+#      learn;                  # Learn all alien routes from the kernel
+#      persist;                # Don't remove routes on bird shutdown
+       scan time 20;           # Scan kernel routing table every 20 seconds
+#      import none;            # Default is import all
+#      export all;             # Default is export none
+}
+
+# This pseudo-protocol watches all interface up/down events.
+protocol device {
+       scan time 10;           # Scan interfaces every 10 seconds
+}
+
+# Static routes (again, there can be multiple instances, so that you
+# can disable/enable various groups of static routes on the fly).
+protocol static {
+#      export all;             # Default is export none
+#      route 0.0.0.0/0 via 62.168.0.13;
+#      route 10.0.0.0/8 reject;
+#      route 192.168.0.0/16 reject;
+}
+
+
+#protocol rip {
+#      disabled;
+#      import all;
+#      export all;
+#      export filter test_filter;
+
+#      port 1520;
+#      period 7;
+#      infinity 16;
+#      garbage time 60;
+#      interface "*" { mode broadcast; };
+#      honor neighbor;
+#      honor always;
+#      honor never;
+#      authentication none;
+#}
+
+
+#protocol ospf {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      area 0 {
+#              interface "eth*" {
+#                      cost 10;
+#                      hello 3;
+#                      retransmit 2;
+#                      wait 5;
+#                      dead 20;
+#                      type broadcast;
+#                      authentication simple;
+#                      password "pass";
+#              };
+#      };
+#}
+
+
+#protocol bgp {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      local as 65000;
+#      neighbor 192.168.1.1 as 65001;
+#      multihop 20 via 192.168.2.1;
+
+#      hold time 240;
+#      startup hold time 240;
+#      connect retry time 120;
+#      keepalive time 80;      # defaults to hold time / 3
+#      start delay time 5;     # How long do we wait before initial connect
+#      error wait time 60, 300;# Minimum and maximum time we wait after an 
error (when consecutive
+#                              # errors occur, we increase the delay 
exponentially ...
+#      error forget time 300;  # ... until this timeout expires)
+#      disable after error;    # Disable the protocol automatically when an 
error occurs
+#      next hop self;          # Disable next hop processing and always 
advertise our local address as nexthop
+#      source address 62.168.0.14;     # What local address we use for the TCP 
connection
+#      password "secret"       # Password used for MD5 authentication
+#      rr client;              # I am a route reflector and the neighor is my 
client
+#      rr cluster id 1.0.0.1   # Use this value for cluster id instead of my 
router id 
+#      };
+#}
diff -uprN packages-/net/bird/files/bird4.init 
packages/net/bird/files/bird4.init
--- packages-/net/bird/files/bird4.init 1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/files/bird4.init  2010-04-10 11:44:13.000000000 +0200
@@ -0,0 +1,22 @@
+#!/bin/sh /etc/rc.common
+
+START=50
+
+# Birdloop is used to restart BIRD if it crashed. Unfortunately, it also
+# hides and handles in the same manner start-time errors (like parse error
+# in config file). Therefore, it is not used by default. If you want to
+# use it, comment the first line and uncomment the second line in start().
+
+start() {
+       /usr/sbin/bird4
+#      /usr/sbin/bird4loop
+}
+
+stop() {
+       killall bird4
+       sleep 1
+}
+
+reload() {
+       killall -HUP bird4
+}
diff -uprN packages-/net/bird/files/bird4loop packages/net/bird/files/bird4loop
--- packages-/net/bird/files/bird4loop  1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/files/bird4loop   2010-04-10 11:55:32.000000000 +0200
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+BIRD=/usr/sbin/bird4
+
+$BIRD -p
+
+( until $BIRD -d "$@"
+do
+       logger error BIRD4 died!
+       sleep 2
+done; ) </dev/null >/dev/null 2> /dev/null &
+
diff -uprN packages-/net/bird/files/bird6.conf 
packages/net/bird/files/bird6.conf
--- packages-/net/bird/files/bird6.conf 1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/files/bird6.conf  2010-04-10 11:53:10.000000000 +0200
@@ -0,0 +1,121 @@
+
+# THIS CONFIG FILE IS NOT A COMPLETE DOCUMENTATION
+# PLEASE LOOK IN THE BIRD DOCUMENTATION FOR MORE INFO
+
+# However, most of options used here are just for example
+# and will be removed in real-life configs.
+
+log syslog all;
+
+# Override router ID
+#router id 192.168.0.1;
+
+# Turn on global debugging of all protocols
+#debug protocols all;
+
+
+# Define a route filter...
+# filter test_filter {
+#      if net ~ 10.0.0.0/16 then accept;
+#      else reject;
+# }
+
+# The direct protocol automatically generates device routes to all network
+# interfaces. Can exist in as many instances as you wish if you want to
+# populate multiple routing tables with device routes. Because device routes
+# are handled by Linux kernel, this protocol is  usually not needed.
+# protocol direct {
+#      interface "*";  # Restrict network interfaces it works with
+# }
+
+# This pseudo-protocol performs synchronization between BIRD's routing
+# tables and the kernel. You can run multiple instances of the kernel
+# protocol and synchronize different kernel tables with different BIRD tables.
+protocol kernel {
+#      learn;                  # Learn all alien routes from the kernel
+#      persist;                # Don't remove routes on bird shutdown
+       scan time 20;           # Scan kernel routing table every 20 seconds
+#      import none;            # Default is import all
+#      export all;             # Default is export none
+}
+
+# This pseudo-protocol watches all interface up/down events.
+protocol device {
+       scan time 10;           # Scan interfaces every 10 seconds
+}
+
+# Static routes (again, there can be multiple instances, so that you
+# can disable/enable various groups of static routes on the fly).
+protocol static {
+#      export all;             # Default is export none
+#      route 0.0.0.0/0 via 62.168.0.13;
+#      route 10.0.0.0/8 reject;
+#      route 192.168.0.0/16 reject;
+}
+
+
+#protocol rip {
+#      disabled;
+#      import all;
+#      export all;
+#      export filter test_filter;
+
+#      port 1520;
+#      period 7;
+#      infinity 16;
+#      garbage time 60;
+#      interface "*" { mode broadcast; };
+#      honor neighbor;
+#      honor always;
+#      honor never;
+#      authentication none;
+#}
+
+
+#protocol ospf {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      area 0 {
+#              interface "eth*" {
+#                      cost 10;
+#                      hello 3;
+#                      retransmit 2;
+#                      wait 5;
+#                      dead 20;
+#                      type broadcast;
+#                      authentication simple;
+#                      password "pass";
+#              };
+#      };
+#}
+
+
+#protocol bgp {
+#      disabled;
+#      import all;
+#      export all;
+#      export where source = RTS_STATIC;
+
+#      local as 65000;
+#      neighbor 192.168.1.1 as 65001;
+#      multihop 20 via 192.168.2.1;
+
+#      hold time 240;
+#      startup hold time 240;
+#      connect retry time 120;
+#      keepalive time 80;      # defaults to hold time / 3
+#      start delay time 5;     # How long do we wait before initial connect
+#      error wait time 60, 300;# Minimum and maximum time we wait after an 
error (when consecutive
+#                              # errors occur, we increase the delay 
exponentially ...
+#      error forget time 300;  # ... until this timeout expires)
+#      disable after error;    # Disable the protocol automatically when an 
error occurs
+#      next hop self;          # Disable next hop processing and always 
advertise our local address as nexthop
+#      source address 62.168.0.14;     # What local address we use for the TCP 
connection
+#      password "secret"       # Password used for MD5 authentication
+#      rr client;              # I am a route reflector and the neighor is my 
client
+#      rr cluster id 1.0.0.1   # Use this value for cluster id instead of my 
router id 
+#      };
+#}
diff -uprN packages-/net/bird/files/bird6.init 
packages/net/bird/files/bird6.init
--- packages-/net/bird/files/bird6.init 1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/files/bird6.init  2010-04-10 11:44:13.000000000 +0200
@@ -0,0 +1,22 @@
+#!/bin/sh /etc/rc.common
+
+START=50
+
+# Birdloop is used to restart BIRD if it crashed. Unfortunately, it also
+# hides and handles in the same manner start-time errors (like parse error
+# in config file). Therefore, it is not used by default. If you want to
+# use it, comment the first line and uncomment the second line in start().
+
+start() {
+       /usr/sbin/bird6
+#      /usr/sbin/bird6loop
+}
+
+stop() {
+       killall bird6
+       sleep 1
+}
+
+reload() {
+       killall -HUP bird6
+}
diff -uprN packages-/net/bird/files/bird6loop packages/net/bird/files/bird6loop
--- packages-/net/bird/files/bird6loop  1970-01-01 01:00:00.000000000 +0100
+++ packages/net/bird/files/bird6loop   2010-04-10 11:55:54.000000000 +0200
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+BIRD=/usr/sbin/bird6
+
+$BIRD -p
+
+( until $BIRD -d "$@"
+do
+       logger error BIRD6 died!
+       sleep 2
+done; ) </dev/null >/dev/null 2> /dev/null &
+
diff -uprN packages-/net/bird/patches/0001-change_config_name.patch 
packages/net/bird/patches/0001-change_config_name.patch
--- packages-/net/bird/patches/0001-change_config_name.patch    1970-01-01 
01:00:00.000000000 +0100
+++ packages/net/bird/patches/0001-change_config_name.patch     2010-04-10 
11:44:13.000000000 +0200
@@ -0,0 +1,20 @@
+diff --git a/sysdep/config.h b/sysdep/config.h
+index 03399bd..bc5eb77 100644
+--- a/sysdep/config.h
++++ b/sysdep/config.h
+@@ -46,11 +46,11 @@ typedef u16 word;
+ #  endif
+ #else
+ #  ifdef DEBUGGING
+-#    define PATH_CONFIG "bird.conf"
+-#    define PATH_CONTROL_SOCKET "bird.ctl"
++#    define PATH_CONFIG "bird4.conf"
++#    define PATH_CONTROL_SOCKET "bird4.ctl"
+ #  else
+-#    define PATH_CONFIG PATH_CONFIG_DIR "/bird.conf"
+-#    define PATH_CONTROL_SOCKET PATH_CONTROL_SOCKET_DIR "/bird.ctl"
++#    define PATH_CONFIG PATH_CONFIG_DIR "/bird4.conf"
++#    define PATH_CONTROL_SOCKET PATH_CONTROL_SOCKET_DIR "/bird4.ctl"
+ #  endif
+ #endif
+ 

-- 
Elen sila lumenn' omentielvo

Ondrej 'SanTiago' Zajicek (email: santi...@crfreenet.org)
OpenPGP encrypted e-mails preferred (KeyID 0x11DEADC3, wwwkeys.pgp.net)
"To err is human -- to blame it on a computer is even more so."
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to