diff --git a/net/batman-advanced/Makefile b/net/batman-advanced/Makefile new file mode 100644 index 000000000..818b09e51 --- /dev/null +++ b/net/batman-advanced/Makefile @@ -0,0 +1,57 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id: Makefile 5624 2006-11-23 00:29:07Z nbd $ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=batmand-adv +PKG_VERSION:=0.1-alpha-rv466_sources +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)_$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).tgz +PKG_SOURCE_URL:=http://downloads.open-mesh.net/batman/development/sources/ +PKG_MD5SUM:=3ebc394a7b7b3fa5cecaf97f6a220a3f +PKG_CAT:=zcat + +PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install + +include $(INCLUDE_DIR)/package.mk + +define Package/batman-advanced + SECTION:=net + CATEGORY:=Network + DEPENDS:=+libpthread +kmod-tun + TITLE:=B.A.T.M.A.N. Better Approach To Mobile Ad-hoc Networking (L2 Version) + URL:=https://www.open-mesh.net/ +endef + +define Build/Configure +endef + +define Build/Compile + rm -rf $(PKG_INSTALL_DIR) + mkdir -p $(PKG_INSTALL_DIR) + $(MAKE) -C "$(PKG_BUILD_DIR)" \ + $(TARGET_CONFIGURE_OPTS) \ + NODEBUG=1 \ + OFLAGS="$(TARGET_CFLAGS)" \ + UNAME="Linux" \ + INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \ + STRIP="/bin/true" \ + batmand-adv install +endef + +define Package/batman-advanced/install + $(INSTALL_DIR) $(1)/usr/sbin + $(CP) $(PKG_INSTALL_DIR)/usr/sbin/batmand-adv $(1)/usr/sbin/ + $(CP) -a ./files/* $(1)/ + chmod -R 755 $(1)/etc/init.d/batman +endef + + +$(eval $(call BuildPackage,batman-advanced)) diff --git a/net/batman-advanced/Makefile.save b/net/batman-advanced/Makefile.save new file mode 100644 index 000000000..53cb85cb8 --- /dev/null +++ b/net/batman-advanced/Makefile.save @@ -0,0 +1,57 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id: Makefile 5624 2006-11-23 00:29:07Z nbd $ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=batman-advanced-III +PKG_VERSION:=r342 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_URL:=http://downloads.open-mesh.net/batman +PKG_MD5SUM:=59662fa2c7ac80f5d1235c8e4ae0a80b +PKG_CAT:=bzcat + +PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install + +include $(INCLUDE_DIR)/package.mk + +define Package/batman-advanced + SECTION:=net + CATEGORY:=Network + DEPENDS:=+libpthread +kmod-tun + TITLE:=B.A.T.M.A.N. Better Approach To Mobile Ad-hoc Networking (L2 Version) + URL:=https://www.open-mesh.net/ +endef + +define Build/Configure +endef + +define Build/Compile + rm -rf $(PKG_INSTALL_DIR) + mkdir -p $(PKG_INSTALL_DIR) + $(MAKE) -C "$(PKG_BUILD_DIR)" \ + $(TARGET_CONFIGURE_OPTS) \ + NODEBUG=1 \ + OFLAGS="$(TARGET_CFLAGS)" \ + UNAME="Linux" \ + INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \ + STRIP="/bin/true" \ + batmand install +endef + +define Package/batman-advanced/install + $(INSTALL_DIR) $(1)/usr/sbin + $(CP) $(PKG_INSTALL_DIR)/usr/sbin/batmand $(1)/usr/sbin/ + $(CP) -a ./files/* $(1)/ + chmod -R 755 $(1)/etc/init.d/batman +endef + + +$(eval $(call BuildPackage,batman-advanced)) diff --git a/net/batman-advanced/files/etc/config/batman-adv b/net/batman-advanced/files/etc/config/batman-adv new file mode 100644 index 000000000..16fc281bf --- /dev/null +++ b/net/batman-advanced/files/etc/config/batman-adv @@ -0,0 +1,8 @@ +config batman-adv general + option interface ath0 + option announce + option gateway_class + option originator_interval + option preferred_gateway + option routing_class + option visualisation_srv diff --git a/net/batman-advanced/files/etc/init.d/batman-adv b/net/batman-advanced/files/etc/init.d/batman-adv new file mode 100644 index 000000000..260354642 --- /dev/null +++ b/net/batman-advanced/files/etc/init.d/batman-adv @@ -0,0 +1,55 @@ +#!/bin/sh /etc/rc.common +START=100 +. /lib/config/uci.sh +uci_load batman-adv +start () { + interface=$(uci get batman-adv.general.interface) + if [ "$interface" = "" ]; then + echo $1 Error, you must specify at least a network interface + exit + fi + announce=$(uci get batman-adv.general.announce) + gateway_class=$(uci get batman-adv.general.gateway_class) + originator_interval=$(uci get batman-adv.general.originator_interval) + preferred_gateway=$(uci get batman-adv.general.preferred_gateway) + routing_class=$(uci get batman-adv.general.routing_class) + visualisation_srv=$(uci get batman-adv.general.visualisation_srv) + batman_args="" + + if [ $announce ]; then + batman_args=${batman_args}'-a '$announce' ' + fi + + if [ $gateway_class ]; then + batman_args=${batman_args}'-g '$gateway_class' ' + fi + + if [ $originator_interval ]; then + batman_args=${batman_args}'-o '$originator_interval' ' + fi + + if [ $preferred_gateway ]; then + batman_args=${batman_args}'-p '$preferred_gateway' ' + fi + + if [ $routing_class ]; then + batman_args=${batman_args}'-r '$routing_class' ' + fi + + if [ $visualisation_srv ]; then + batman_args=${batman_args}'-s '$visualisation_srv' ' + fi + + batman_args=${batman_args}$interface + batmand-adv $batman_args >/dev/null 2>&1 +} + +restart () { + $0 stop + sleep 3 + $0 start +} + +stop () { + killall batmand-adv +} diff --git a/net/batman-advanced/patches/100-makefile.patch b/net/batman-advanced/patches/100-makefile.patch new file mode 100644 index 000000000..bc980b1d9 --- /dev/null +++ b/net/batman-advanced/patches/100-makefile.patch @@ -0,0 +1,23 @@ +diff -urN batmand-adv_0.1-alpha-rv466_sources.orig/Makefile batmand-adv_0.1-alpha-rv466_sources/Makefile +--- batmand-adv_0.1-alpha-rv466_sources.orig/Makefile 2007-07-31 22:03:22.433434504 +0100 ++++ batmand-adv_0.1-alpha-rv466_sources/Makefile 2007-07-31 22:05:07.553434504 +0100 +@@ -21,6 +21,7 @@ + CFLAGS = -Wall -O1 -g3 + STRIP= strip + LDFLAGS = -lpthread ++SBINDIR= $(INSTALL_PREFIX)/usr/sbin + + CFLAGS_MIPS = -Wall -O1 -g3 + LDFLAGS_MIPS = -lpthread +@@ -253,4 +254,9 @@ + rm -f batmand-adv batmand-mips* *.o *~ + + clean-long: +- rm -rf batmand-adv_* +\ No newline at end of file ++ rm -rf batmand-adv_* ++ ++install: ++ mkdir -p $(SBINDIR) ++ install -m 755 batmand-adv $(SBINDIR) ++ diff --git a/net/batman-advanced/patches/200-list.h.patch b/net/batman-advanced/patches/200-list.h.patch new file mode 100644 index 000000000..271a692da --- /dev/null +++ b/net/batman-advanced/patches/200-list.h.patch @@ -0,0 +1,274 @@ +diff -urN batmand-adv_0.1-alpha-rv466_sources.orig/list.h batmand-adv_0.1-alpha-rv466_sources/list.h +--- batmand-adv_0.1-alpha-rv466_sources.orig/list.h 1970-01-01 01:00:00.000000000 +0100 ++++ batmand-adv_0.1-alpha-rv466_sources/list.h 2007-07-31 21:56:31.633434504 +0100 +@@ -0,0 +1,270 @@ ++#ifndef _LINUX_LIST_H ++#define _LINUX_LIST_H ++ ++/* ++ * XXX: Resolve conflict between this file and on BSD systems. ++ */ ++#ifdef LIST_HEAD ++#undef LIST_HEAD ++#endif ++ ++/* ++ * Simple doubly linked list implementation. ++ * ++ * Some of the internal functions ("__xxx") are useful when ++ * manipulating whole lists rather than single entries, as ++ * sometimes we already know the next/prev entries and we can ++ * generate better code by using them directly rather than ++ * using the generic single-entry routines. ++ */ ++ ++struct list_head { ++ struct list_head *next, *prev; ++}; ++ ++#define LIST_HEAD_INIT(name) { &(name), &(name) } ++ ++#define LIST_HEAD(name) \ ++ struct list_head name = LIST_HEAD_INIT(name) ++ ++#define INIT_LIST_HEAD(ptr) do { \ ++ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ ++} while (0) ++ ++/* ++ * Insert a new entry between two known consecutive entries. ++ * ++ * This is only for internal list manipulation where we know ++ * the prev/next entries already! ++ */ ++static inline void __list_add(struct list_head *new, ++ struct list_head *prev, ++ struct list_head *next) ++{ ++ next->prev = new; ++ new->next = next; ++ new->prev = prev; ++ prev->next = new; ++} ++ ++/** ++ * list_add - add a new entry ++ * @new: new entry to be added ++ * @head: list head to add it after ++ * ++ * Insert a new entry after the specified head. ++ * This is good for implementing stacks. ++ */ ++static inline void list_add(struct list_head *new, struct list_head *head) ++{ ++ __list_add(new, head, head->next); ++} ++ ++/** ++ * list_add_tail - add a new entry ++ * @new: new entry to be added ++ * @head: list head to add it before ++ * ++ * Insert a new entry before the specified head. ++ * This is useful for implementing queues. ++ */ ++static inline void list_add_tail(struct list_head *new, struct list_head *head) ++{ ++ __list_add(new, head->prev, head); ++} ++ ++/* ++ * Delete a list entry by making the prev/next entries ++ * point to each other. ++ * ++ * This is only for internal list manipulation where we know ++ * the prev/next entries already! ++ */ ++static inline void __list_del(struct list_head *prev, struct list_head *next) ++{ ++ next->prev = prev; ++ prev->next = next; ++} ++ ++/** ++ * list_del - deletes entry from list. ++ * @entry: the element to delete from the list. ++ * Note: list_empty on entry does not return true after this, the entry is in an undefined state. ++ */ ++static inline void list_del(struct list_head *entry) ++{ ++ __list_del(entry->prev, entry->next); ++ entry->next = (void *) 0; ++ entry->prev = (void *) 0; ++} ++ ++static inline void list_add_before( struct list_head *list, struct list_head *pos_node, struct list_head *new_node ) { ++ ++ if ( pos_node->prev != NULL ) ++ pos_node->prev->next = new_node; ++ else ++ list->next = new_node; ++ ++ new_node->prev = pos_node->prev; ++ new_node->next = pos_node; ++ ++ pos_node->prev = new_node; ++ ++} ++ ++/** ++ * list_del_init - deletes entry from list and reinitialize it. ++ * @entry: the element to delete from the list. ++ */ ++static inline void list_del_init(struct list_head *entry) ++{ ++ __list_del(entry->prev, entry->next); ++ INIT_LIST_HEAD(entry); ++} ++ ++/** ++ * list_move - delete from one list and add as another's head ++ * @list: the entry to move ++ * @head: the head that will precede our entry ++ */ ++static inline void list_move(struct list_head *list, struct list_head *head) ++{ ++ __list_del(list->prev, list->next); ++ list_add(list, head); ++} ++ ++/** ++ * list_move_tail - delete from one list and add as another's tail ++ * @list: the entry to move ++ * @head: the head that will follow our entry ++ */ ++static inline void list_move_tail(struct list_head *list, ++ struct list_head *head) ++{ ++ __list_del(list->prev, list->next); ++ list_add_tail(list, head); ++} ++ ++/** ++ * list_empty - tests whether a list is empty ++ * @head: the list to test. ++ */ ++static inline int list_empty(struct list_head *head) ++{ ++ return head->next == head; ++} ++ ++static inline void __list_splice(struct list_head *list, ++ struct list_head *head) ++{ ++ struct list_head *first = list->next; ++ struct list_head *last = list->prev; ++ struct list_head *at = head->next; ++ ++ first->prev = head; ++ head->next = first; ++ ++ last->next = at; ++ at->prev = last; ++} ++ ++/** ++ * list_splice - join two lists ++ * @list: the new list to add. ++ * @head: the place to add it in the first list. ++ */ ++static inline void list_splice(struct list_head *list, struct list_head *head) ++{ ++ if (!list_empty(list)) ++ __list_splice(list, head); ++} ++ ++/** ++ * list_splice_init - join two lists and reinitialise the emptied list. ++ * @list: the new list to add. ++ * @head: the place to add it in the first list. ++ * ++ * The list at @list is reinitialised ++ */ ++static inline void list_splice_init(struct list_head *list, ++ struct list_head *head) ++{ ++ if (!list_empty(list)) { ++ __list_splice(list, head); ++ INIT_LIST_HEAD(list); ++ } ++} ++ ++/** ++ * list_entry - get the struct for this entry ++ * @ptr: the &struct list_head pointer. ++ * @type: the type of the struct this is embedded in. ++ * @member: the name of the list_struct within the struct. ++ */ ++#define list_entry(ptr, type, member) \ ++ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) ++ ++/** ++ * list_for_each - iterate over a list ++ * @pos: the &struct list_head to use as a loop counter. ++ * @head: the head for your list. ++ */ ++#define list_for_each(pos, head) \ ++ for (pos = (head)->next; pos != (head); \ ++ pos = pos->next) ++/** ++ * list_for_each_prev - iterate over a list backwards ++ * @pos: the &struct list_head to use as a loop counter. ++ * @head: the head for your list. ++ */ ++#define list_for_each_prev(pos, head) \ ++ for (pos = (head)->prev; pos != (head); \ ++ pos = pos->prev) ++ ++/** ++ * list_for_each_safe - iterate over a list safe against removal of list entry ++ * @pos: the &struct list_head to use as a loop counter. ++ * @n: another &struct list_head to use as temporary storage ++ * @head: the head for your list. ++ */ ++#define list_for_each_safe(pos, n, head) \ ++ for (pos = (head)->next, n = pos->next; pos != (head); \ ++ pos = n, n = pos->next) ++ ++/** ++ * list_for_each_entry - iterate over list of given type ++ * @pos: the type * to use as a loop counter. ++ * @head: the head for your list. ++ * @member: the name of the list_struct within the struct. ++ */ ++#define list_for_each_entry(pos, head, member) \ ++ for (pos = list_entry((head)->next, typeof(*pos), member); \ ++ &pos->member != (head); \ ++ pos = list_entry(pos->member.next, typeof(*pos), member)) ++ ++/** ++ * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry ++ * @pos: the type * to use as a loop counter. ++ * @n: another type * to use as temporary storage ++ * @head: the head for your list. ++ * @member: the name of the list_struct within the struct. ++ */ ++#define list_for_each_entry_safe(pos, n, head, member) \ ++ for (pos = list_entry((head)->next, typeof(*pos), member), \ ++ n = list_entry(pos->member.next, typeof(*pos), member); \ ++ &pos->member != (head); \ ++ pos = n, n = list_entry(n->member.next, typeof(*n), member)) ++ ++/** ++ * list_for_each_entry_continue - iterate over list of given type ++ * continuing after existing point ++ * @pos: the type * to use as a loop counter. ++ * @head: the head for your list. ++ * @member: the name of the list_struct within the struct. ++ */ ++#define list_for_each_entry_continue(pos, head, member) \ ++ for (pos = list_entry(pos->member.next, typeof(*pos), member); \ ++ &pos->member != (head); \ ++ pos = list_entry(pos->member.next, typeof(*pos), member)) ++ ++#endif