diff --git a/srcpkgs/batman-adv14/patches/0001-fix-build.diff b/srcpkgs/batman-adv14/patches/0001-fix-build.diff index 5fc3841d5a1..ee8fc175a5a 100644 --- a/srcpkgs/batman-adv14/patches/0001-fix-build.diff +++ b/srcpkgs/batman-adv14/patches/0001-fix-build.diff @@ -1,4 +1,4 @@ -diff --git Makefile.kbuild Makefile.kbuild +diff --git a/Makefile.kbuild b/Makefile.kbuild index 489bb36..8ddbfe6 100644 --- Makefile.kbuild +++ Makefile.kbuild @@ -7,7 +7,66 @@ index 489bb36..8ddbfe6 100644 batman-adv-y += translation-table.o batman-adv-y += unicast.o -batman-adv-y += vis.o -diff --git bat_iv_ogm.c bat_iv_ogm.c +diff --git a/README b/README +index c1d8204..4c20e91 100644 +--- README ++++ README +@@ -1,3 +1,34 @@ ++BATMAN-ADV-LEGACY ++----------------- ++ ++This is the batman-adv "legacy" version (compat-level 14). Use it ++if you have a mesh using compat 14 which can't be easily upgraded ++to a newer version of batman-adv. If you are building a new mesh ++network, you should consider the current upstream version, which ++can be found under ++ ++http://www.open-mesh.org/projects/batman-adv/wiki ++ ++Please don't bother the upstream batman-adv developers with bug ++reports if you are using batman-adv-legacy. The batman-adv-legacy ++maintainers can be found at the bottom of this README. ++ ++BRANCHES ++-------- ++ ++There are currently two branches in this repository: ++ ++* master ++* legacy-vis ++ ++The in-kernel mesh visualization support ("vis_mode" option) has ++been removed from the master branch, so a userspace tool like ++alfred has to be used. If you still require "vis_mode", you can ++use the legacy-vis branch. ++ ++These branches might be merged in the future to allow "vis_mode" ++to be enabled or disabled at runtime. ++ + BATMAN-ADV + ---------- + +@@ -237,13 +268,12 @@ batctl is available on http://www.open-mesh.org/ + CONTACT + ------- + +-Please send us comments, experiences, questions, anything :) ++batman-adv-legacy is maintained by the developers of the Gluon ++firmware framework (see https://github.com/freifunk-gluon/gluon). + +-IRC: #batman on irc.freenode.org +-Mailing-list: b.a.t.m.a.n@open-mesh.org (optional subscription +- at https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n) ++You can find us on IRC: (channel #gluon on irc.hackint.org, look ++for neoraider) + +-You can also contact the Authors: ++Bug reports can also be sent via mail to: + +-Marek Lindner +-Simon Wunderlich ++Matthias Schiffer +diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c index 2031071..6407369 100644 --- bat_iv_ogm.c +++ bat_iv_ogm.c @@ -36,11 +95,19 @@ index 2031071..6407369 100644 if (hard_iface == primary_if && atomic_read(&bat_priv->gw_mode) == BATADV_GW_MODE_SERVER) { -diff --git compat.h compat.h -index 3e11f89..63feaa9 100644 +diff --git a/compat.h b/compat.h +index 3e11f89..0f07edb 100644 --- compat.h +++ compat.h -@@ -266,7 +266,9 @@ static int __batadv_interface_set_mac_addr(x, y) +@@ -258,7 +258,6 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p) \ + }\ + static int __batadv_interface_set_mac_addr(x, y) + +-#define netdev_master_upper_dev_link netdev_set_master + #define netdev_upper_dev_unlink(slave, master) netdev_set_master(slave, NULL) + #define netdev_master_upper_dev_get(dev) \ + ({\ +@@ -266,7 +265,9 @@ static int __batadv_interface_set_mac_addr(x, y) dev->master;\ }) #define hlist_entry_safe(ptr, type, member) \ @@ -51,7 +118,7 @@ index 3e11f89..63feaa9 100644 #undef hlist_for_each_entry #define hlist_for_each_entry(pos, head, member) \ -@@ -318,4 +320,33 @@ static int __batadv_interface_set_mac_addr(x, y) +@@ -318,4 +319,55 @@ static int __batadv_interface_set_mac_addr(x, y) }) #endif /* < KERNEL_VERSION(3, 11, 0) */ @@ -83,9 +150,31 @@ index 3e11f89..63feaa9 100644 +#define dev_get_iflink(_net_dev) ((_net_dev)->iflink) + +#endif /* < KERNEL_VERSION(4, 1, 0) */ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0) ++ ++#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) \ ++ netdev_set_master(dev, upper_dev) ++ ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) ++ ++#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info) \ ++ netdev_master_upper_dev_link(dev, upper_dev) ++ ++#endif /* < KERNEL_VERSION(4, 5, 0) */ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0) ++ ++#define netif_trans_update batadv_netif_trans_update ++static inline void batadv_netif_trans_update(struct net_device *dev) ++{ ++ dev->trans_start = jiffies; ++} ++ ++#endif /* < KERNEL_VERSION(4, 7, 0) */ + #endif /* _NET_BATMAN_ADV_COMPAT_H_ */ -diff --git debugfs.c debugfs.c +diff --git a/debugfs.c b/debugfs.c index f186a55..049a7a2 100644 --- debugfs.c +++ debugfs.c @@ -126,8 +215,8 @@ index f186a55..049a7a2 100644 #ifdef CONFIG_BATMAN_ADV_NC &batadv_debuginfo_nc_nodes, #endif -diff --git gateway_client.c gateway_client.c -index 7614af3..04fbfb2 100644 +diff --git a/gateway_client.c b/gateway_client.c +index 7614af3..6958356 100644 --- gateway_client.c +++ gateway_client.c @@ -115,16 +115,12 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv) @@ -148,11 +237,13 @@ index 7614af3..04fbfb2 100644 rcu_read_lock(); hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { if (gw_node->deleted) -@@ -146,7 +142,7 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv) +@@ -145,8 +141,8 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv) + batadv_gw_bandwidth_to_kbit(orig_node->gw_flags, &down, &up); - tmp_gw_factor = tq_avg * tq_avg * down * 100 * 100; +- tmp_gw_factor = tq_avg * tq_avg * down * 100 * 100; - tmp_gw_factor /= gw_divisor; ++ tmp_gw_factor = (uint64_t)tq_avg * tq_avg * down * 100 * 100; + tmp_gw_factor >>= 18; if ((tmp_gw_factor > max_gw_factor) || @@ -185,7 +276,7 @@ index 7614af3..04fbfb2 100644 batadv_neigh_node_free_ref(router); if (curr_gw) -diff --git gateway_common.c gateway_common.c +diff --git a/gateway_common.c b/gateway_common.c index 84bb2b1..bb3f667 100644 --- gateway_common.c +++ gateway_common.c @@ -215,7 +306,7 @@ index 84bb2b1..bb3f667 100644 (multi > 1)) *tmp_ptr = '\0'; } -diff --git gen-compat-autoconf.sh gen-compat-autoconf.sh +diff --git a/gen-compat-autoconf.sh b/gen-compat-autoconf.sh index 78573e4..c5a3f5d 100755 --- gen-compat-autoconf.sh +++ gen-compat-autoconf.sh @@ -229,8 +320,8 @@ index 78573e4..c5a3f5d 100755 gen_config() { KEY="${1}" -diff --git hard-interface.c hard-interface.c -index c478e6b..01f0a80 100644 +diff --git a/hard-interface.c b/hard-interface.c +index c478e6b..5948c80 100644 --- hard-interface.c +++ hard-interface.c @@ -83,19 +83,18 @@ static bool batadv_is_on_batman_iface(const struct net_device *net_dev) @@ -279,7 +370,17 @@ index c478e6b..01f0a80 100644 batadv_bla_update_orig_address(bat_priv, primary_if, oldif); out: if (primary_if) -@@ -600,6 +591,8 @@ batadv_hardif_add_interface(struct net_device *net_dev) +@@ -429,7 +420,8 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, + hard_iface->soft_iface = soft_iface; + bat_priv = netdev_priv(hard_iface->soft_iface); + +- ret = netdev_master_upper_dev_link(hard_iface->net_dev, soft_iface); ++ ret = netdev_master_upper_dev_link(hard_iface->net_dev, ++ soft_iface, NULL, NULL); + if (ret) + goto err_dev; + +@@ -600,6 +592,8 @@ batadv_hardif_add_interface(struct net_device *net_dev) /* extra reference for return */ atomic_set(&hard_iface->refcount, 2); @@ -288,7 +389,7 @@ index c478e6b..01f0a80 100644 batadv_check_known_mac_addr(hard_iface->net_dev); list_add_tail_rcu(&hard_iface->list, &batadv_hardif_list); -diff --git main.c main.c +diff --git a/main.c b/main.c index c8e0671..a718d07 100644 --- main.c +++ main.c @@ -329,7 +430,7 @@ index c8e0671..a718d07 100644 batadv_gw_node_purge(bat_priv); batadv_nc_mesh_free(bat_priv); batadv_dat_free(bat_priv); -diff --git main.h main.h +diff --git a/main.h b/main.h index 2c0c14d..06e8971 100644 --- main.h +++ main.h @@ -376,7 +477,7 @@ index 2c0c14d..06e8971 100644 #define batadv_info(net_dev, fmt, arg...) \ do { \ struct net_device *_netdev = (net_dev); \ -diff --git originator.c originator.c +diff --git a/originator.c b/originator.c index f50553a..af1b427 100644 --- originator.c +++ originator.c @@ -407,7 +508,7 @@ index f50553a..af1b427 100644 batadv_orig_node_free_ref(orig_node); continue; } -diff --git packet.h packet.h +diff --git a/packet.h b/packet.h index a51ccfc..d12da01 100644 --- packet.h +++ packet.h @@ -441,8 +542,8 @@ index a51ccfc..d12da01 100644 __be32 seqno; uint8_t orig[ETH_ALEN]; uint8_t prev_sender[ETH_ALEN]; -diff --git routing.c routing.c -index 2f0bd3f..5a11611 100644 +diff --git a/routing.c b/routing.c +index 2f0bd3f..f69a32c 100644 --- routing.c +++ routing.c @@ -25,7 +25,6 @@ @@ -453,6 +554,15 @@ index 2f0bd3f..5a11611 100644 #include "unicast.h" #include "bridge_loop_avoidance.h" #include "distributed-arp-table.h" +@@ -845,7 +844,7 @@ static int batadv_route_unicast_packet(struct sk_buff *skb, + skb->len + ETH_HLEN); + + ret = NET_RX_SUCCESS; +- } else if (res == NET_XMIT_POLICED) { ++ } else if (res == -EINPROGRESS) { + /* skb was buffered and consumed */ + ret = NET_RX_SUCCESS; + } @@ -940,11 +939,11 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, if (batadv_tt_local_client_is_roaming(bat_priv, ethhdr->h_dest)) { if (batadv_reroute_unicast_packet(bat_priv, unicast_packet, @@ -583,11 +693,11 @@ index 2f0bd3f..5a11611 100644 + + return ret; } -diff --git send.c send.c -index e9ff8d8..853fcb8 100644 +diff --git a/send.c b/send.c +index e9ff8d8..fd42c65 100644 --- send.c +++ send.c -@@ -24,7 +24,6 @@ +@@ -24,11 +24,11 @@ #include "translation-table.h" #include "soft-interface.h" #include "hard-interface.h" @@ -595,7 +705,30 @@ index e9ff8d8..853fcb8 100644 #include "gateway_common.h" #include "originator.h" #include "network-coding.h" -@@ -272,6 +271,10 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work) + ++#include + #include + + static void batadv_send_outstanding_bcast_packet(struct work_struct *work); +@@ -97,7 +97,7 @@ send_skb_err: + * attempted. + * + * Returns NET_XMIT_SUCCESS on success, NET_XMIT_DROP on failure, or +- * NET_XMIT_POLICED if the skb is buffered for later transmit. ++ * -EINPROGRESS if the skb is buffered for later transmit. + */ + int batadv_send_skb_to_orig(struct sk_buff *skb, + struct batadv_orig_node *orig_node, +@@ -117,7 +117,7 @@ int batadv_send_skb_to_orig(struct sk_buff *skb, + * network coding fails, then send the packet as usual. + */ + if (recv_if && batadv_nc_skb_forward(skb, neigh_node)) { +- ret = NET_XMIT_POLICED; ++ ret = -EINPROGRESS; + } else { + batadv_send_skb_packet(skb, neigh_node->if_incoming, + neigh_node->addr); +@@ -272,6 +272,10 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work) if (forw_packet->num_packets >= hard_iface->num_bcasts) continue; @@ -606,10 +739,19 @@ index e9ff8d8..853fcb8 100644 /* send a copy of the saved skb */ skb1 = skb_clone(forw_packet->skb, GFP_ATOMIC); if (skb1) -diff --git soft-interface.c soft-interface.c -index 33b6144..c5d4743 100644 +diff --git a/soft-interface.c b/soft-interface.c +index 33b6144..3e3f81c 100644 --- soft-interface.c +++ soft-interface.c +@@ -162,7 +162,7 @@ static int batadv_interface_tx(struct sk_buff *skb, + if (atomic_read(&bat_priv->mesh_state) != BATADV_MESH_ACTIVE) + goto dropped; + +- soft_iface->trans_start = jiffies; ++ netif_trans_update(soft_iface); + + switch (ntohs(ethhdr->h_proto)) { + case ETH_P_8021Q: @@ -324,6 +324,11 @@ void batadv_interface_rx(struct net_device *soft_iface, skb_pull_rcsum(skb, hdr_size); skb_reset_mac_header(skb); @@ -648,7 +790,7 @@ index 33b6144..c5d4743 100644 if (!soft_iface) return NULL; -diff --git sysfs-class-net-batman-adv sysfs-class-net-batman-adv +diff --git a/sysfs-class-net-batman-adv b/sysfs-class-net-batman-adv index bdc0070..88f6f70 100644 --- sysfs-class-net-batman-adv +++ sysfs-class-net-batman-adv @@ -666,7 +808,7 @@ index bdc0070..88f6f70 100644 + and symmetric only, for instance point-to-point wifi longshots + or wired links. Using this option wrongly is going to + break your mesh network, use at your own risk! -diff --git sysfs.c sysfs.c +diff --git a/sysfs.c b/sysfs.c index 929e304..944209a 100644 --- sysfs.c +++ sysfs.c @@ -854,8 +996,86 @@ index 929e304..944209a 100644 NULL, }; -diff --git types.h types.h -index b2c94e1..2c5b80e 100644 +diff --git a/translation-table.c b/translation-table.c +index 429aeef..9a8aab6 100644 +--- translation-table.c ++++ translation-table.c +@@ -1487,6 +1487,19 @@ static uint16_t batadv_tt_local_crc(struct batadv_priv *bat_priv) + return total; + } + ++/** ++ * batadv_tt_req_node_release - free tt_req node entry ++ * @ref: kref pointer of the tt req_node entry ++ */ ++static void batadv_tt_req_node_release(struct kref *ref) ++{ ++ struct batadv_tt_req_node *node; ++ ++ node = container_of(ref, struct batadv_tt_req_node, refcount); ++ ++ kfree(node); ++} ++ + static void batadv_tt_req_list_free(struct batadv_priv *bat_priv) + { + struct batadv_tt_req_node *node, *safe; +@@ -1495,7 +1508,7 @@ static void batadv_tt_req_list_free(struct batadv_priv *bat_priv) + + list_for_each_entry_safe(node, safe, &bat_priv->tt.req_list, list) { + list_del(&node->list); +- kfree(node); ++ kref_put(&node->refcount, batadv_tt_req_node_release); + } + + spin_unlock_bh(&bat_priv->tt.req_list_lock); +@@ -1533,7 +1546,7 @@ static void batadv_tt_req_purge(struct batadv_priv *bat_priv) + if (batadv_has_timed_out(node->issued_at, + BATADV_TT_REQUEST_TIMEOUT)) { + list_del(&node->list); +- kfree(node); ++ kref_put(&node->refcount, batadv_tt_req_node_release); + } + } + spin_unlock_bh(&bat_priv->tt.req_list_lock); +@@ -1560,9 +1573,11 @@ batadv_new_tt_req_node(struct batadv_priv *bat_priv, + if (!tt_req_node) + goto unlock; + ++ kref_init(&tt_req_node->refcount); + memcpy(tt_req_node->addr, orig_node->orig, ETH_ALEN); + tt_req_node->issued_at = jiffies; + ++ kref_get(&tt_req_node->refcount); + list_add(&tt_req_node->list, &bat_priv->tt.req_list); + unlock: + spin_unlock_bh(&bat_priv->tt.req_list_lock); +@@ -1724,9 +1739,13 @@ out: + if (ret && tt_req_node) { + spin_lock_bh(&bat_priv->tt.req_list_lock); + list_del(&tt_req_node->list); ++ kref_put(&tt_req_node->refcount, batadv_tt_req_node_release); + spin_unlock_bh(&bat_priv->tt.req_list_lock); +- kfree(tt_req_node); + } ++ ++ if (tt_req_node) ++ kref_put(&tt_req_node->refcount, batadv_tt_req_node_release); ++ + return ret; + } + +@@ -2111,7 +2130,7 @@ void batadv_handle_tt_response(struct batadv_priv *bat_priv, + if (!batadv_compare_eth(node->addr, tt_response->src)) + continue; + list_del(&node->list); +- kfree(node); ++ kref_put(&node->refcount, batadv_tt_req_node_release); + } + spin_unlock_bh(&bat_priv->tt.req_list_lock); + +diff --git a/types.h b/types.h +index b2c94e1..b4d38e4 100644 --- types.h +++ types.h @@ -85,6 +85,7 @@ struct batadv_hard_iface { @@ -866,10 +1086,11 @@ index b2c94e1..2c5b80e 100644 }; /** -@@ -430,24 +431,6 @@ struct batadv_priv_gw { +@@ -429,24 +430,6 @@ struct batadv_priv_gw { + atomic_t reselect; }; - /** +-/** - * struct batadv_priv_vis - per mesh interface vis data - * @send_list: list of batadv_vis_info packets to sent - * @hash: hash table containing vis data from other nodes in the network @@ -887,10 +1108,9 @@ index b2c94e1..2c5b80e 100644 - struct batadv_vis_info *my_info; -}; - --/** + /** * struct batadv_priv_dat - per mesh interface DAT private data * @addr: node DAT address - * @hash: hashtable representing the local ARP cache @@ -504,7 +487,6 @@ struct batadv_priv_nc { * enabled * @distributed_arp_table: bool indicating whether distributed ARP table is @@ -923,10 +1143,25 @@ index b2c94e1..2c5b80e 100644 #ifdef CONFIG_BATMAN_ADV_DAT struct batadv_priv_dat dat; #endif -@@ -878,66 +857,6 @@ struct batadv_frag_packet_list_entry { +@@ -747,11 +726,13 @@ struct batadv_tt_change_node { + * struct batadv_tt_req_node - data to keep track of the tt requests in flight + * @addr: mac address address of the originator this request was sent to + * @issued_at: timestamp used for purging stale tt requests ++ * @refcount: number of contexts the object is used by + * @list: list node for batadv_priv_tt::req_list + */ + struct batadv_tt_req_node { + uint8_t addr[ETH_ALEN]; + unsigned long issued_at; ++ struct kref refcount; + struct list_head list; }; - /** +@@ -877,66 +858,6 @@ struct batadv_frag_packet_list_entry { + struct sk_buff *skb; + }; + +-/** - * struct batadv_vis_info - local data for vis information - * @first_seen: timestamp used for purging stale vis info entries - * @recv_list: List of server-neighbors we have received this packet from. This @@ -986,11 +1221,10 @@ index b2c94e1..2c5b80e 100644 - struct hlist_node list; -}; - --/** + /** * struct batadv_algo_ops - mesh algorithm callbacks * @list: list node for the batadv_algo_list - * @name: name of the algorithm -diff --git vis.c vis.c +diff --git a/vis.c b/vis.c deleted file mode 100644 index 4983340..0000000 --- vis.c @@ -1932,7 +2166,7 @@ index 4983340..0000000 - bat_priv->vis.my_info = NULL; - spin_unlock_bh(&bat_priv->vis.hash_lock); -} -diff --git vis.h vis.h +diff --git a/vis.h b/vis.h deleted file mode 100644 index ad92b0e..0000000 --- vis.h diff --git a/srcpkgs/batman-adv14/template b/srcpkgs/batman-adv14/template index 7007eed2029..523b448897a 100644 --- a/srcpkgs/batman-adv14/template +++ b/srcpkgs/batman-adv14/template @@ -1,7 +1,7 @@ # Template file for 'batman-adv14' pkgname=batman-adv14 version=2013.4.0 -revision=7 +revision=8 short_desc="B.A.T.M.A.N. routing protocol kernel module (protocol version 14)" maintainer="Enno Boland " license="GPL-2"