--- /dev/null
+#
+# 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))
--- /dev/null
+
+# 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
+# };
+#}
--- /dev/null
+#!/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
+}
--- /dev/null
+#!/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 &
+
--- /dev/null
+
+# 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
+# };
+#}
--- /dev/null
+#!/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
+}
--- /dev/null
+#!/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 &
+
--- /dev/null
+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
+