[B.A.T.M.A.N.] [PATCH] batctl: added ap_isolation support
by Antonio Quartulli
This patch introduces the possibility of enabling/disabling the
ap_isolation feature in batman-adv
Signed-off-by: Antonio Quartulli <ordex(a)autistici.org>
---
main.c | 6 ++++++
sys.c | 7 +++++++
sys.h | 2 ++
3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/main.c b/main.c
index eb67737..059c00f 100644
--- a/main.c
+++ b/main.c
@@ -58,6 +58,7 @@ void print_usage(void) {
printf(" \taggregation|ag [0|1] \tdisplay or modify the packet aggregation setting\n");
printf(" \tbonding|b [0|1] \tdisplay or modify the bonding mode setting\n");
printf(" \tfragmentation|f [0|1] \tdisplay or modify the fragmentation mode setting\n");
+ printf(" \tap_isolation|ap [0|1] \tdisplay or modify the ap isolation mode setting\n");
printf("\n");
printf(" \tping|p <destination> \tping another batman adv host via layer 2\n");
printf(" \ttraceroute|tr <destination> \ttraceroute another batman adv host via layer 2\n");
@@ -188,6 +189,11 @@ int main(int argc, char **argv)
ret = handle_sys_setting(mesh_iface, argc - 1, argv + 1,
SYS_FRAG, fragmentation_usage, sysfs_param_enable);
+ } else if ((strcmp(argv[1], "ap_isolation") == 0) || (strcmp(argv[1], "ap") == 0)) {
+
+ ret = handle_sys_setting(mesh_iface, argc - 1, argv + 1,
+ SYS_AP_ISOLA, ap_isolation_usage, sysfs_param_enable);
+
} else if ((strcmp(argv[1], "bisect") == 0)) {
ret = bisect(argc - 1, argv + 1);
diff --git a/sys.c b/sys.c
index dbf5383..4f2b2c5 100644
--- a/sys.c
+++ b/sys.c
@@ -270,6 +270,13 @@ void fragmentation_usage(void)
printf(" \t -h print this help\n");
}
+void ap_isolation_usage(void)
+{
+ printf("Usage: batctl [options] ap_isolation [0|1]\n");
+ printf("options:\n");
+ printf(" \t -h print this help\n");
+}
+
int handle_sys_setting(char *mesh_iface, int argc, char **argv,
char *file_path, void setting_usage(void),
const char *sysfs_param[])
diff --git a/sys.h b/sys.h
index 2c47550..2df846c 100644
--- a/sys.h
+++ b/sys.h
@@ -34,6 +34,7 @@
#define SYS_MESH_IFACE_FMT SYS_IFACE_PATH"/%s/batman_adv/mesh_iface"
#define SYS_IFACE_STATUS_FMT SYS_IFACE_PATH"/%s/batman_adv/iface_status"
#define SYS_FRAG "fragmentation"
+#define SYS_AP_ISOLA "ap_isolation"
enum gw_modes {
GW_MODE_OFF,
@@ -47,6 +48,7 @@ extern const char *sysfs_param_server[];
void aggregation_usage(void);
void bonding_usage(void);
void fragmentation_usage(void);
+void ap_isolation_usage(void);
void gw_mode_usage(void);
void vis_mode_usage(void);
void orig_interval_usage(void);
--
1.7.3.4
11 years, 6 months
[B.A.T.M.A.N.] [PATCH] batman-adv: aggregation checks should use the primary_if pointer
by Marek Lindner
The packet aggregation needs to ensure that only compatible packets
are aggregated. Some of the checks are based on the interface number
while assuming that the first interface also is the primary interface
which is not always the case.
This patch addresses the issue by using the primary_if pointer.
Reported-by: Antonio Quartulli <ordex(a)autistici.org>
Signed-off-by: Marek Lindner <lindner_marek(a)yahoo.de>
---
aggregation.c | 25 ++++++++++++++++++++-----
1 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/aggregation.c b/aggregation.c
index c583e04..69467fe 100644
--- a/aggregation.c
+++ b/aggregation.c
@@ -28,6 +28,7 @@
/* return true if new_packet can be aggregated with forw_packet */
static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
+ struct bat_priv *bat_priv,
int packet_len,
unsigned long send_time,
bool directlink,
@@ -37,6 +38,8 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
struct batman_packet *batman_packet =
(struct batman_packet *)forw_packet->skb->data;
int aggregated_bytes = forw_packet->packet_len + packet_len;
+ struct hard_iface *primary_if = NULL;
+ bool res = false;
/**
* we can aggregate the current packet to this aggregated packet
@@ -61,6 +64,10 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
* packet
*/
+ primary_if = primary_if_get_selected(bat_priv);
+ if (!primary_if)
+ goto out;
+
/* packets without direct link flag and high TTL
* are flooded through the net */
if ((!directlink) &&
@@ -70,8 +77,10 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
/* own packets originating non-primary
* interfaces leave only that interface */
((!forw_packet->own) ||
- (forw_packet->if_incoming->if_num == 0)))
- return true;
+ (forw_packet->if_incoming == primary_if))) {
+ res = true;
+ goto out;
+ }
/* if the incoming packet is sent via this one
* interface only - we still can aggregate */
@@ -84,11 +93,16 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
* (= secondary interface packets in general) */
(batman_packet->flags & DIRECTLINK ||
(forw_packet->own &&
- forw_packet->if_incoming->if_num != 0)))
- return true;
+ forw_packet->if_incoming != primary_if))) {
+ res = true;
+ goto out;
+ }
}
- return false;
+out:
+ if (primary_if)
+ hardif_free_ref(primary_if);
+ return res;
}
/* create a new aggregated packet and add this packet to it */
@@ -210,6 +224,7 @@ void add_bat_packet_to_list(struct bat_priv *bat_priv,
hlist_for_each_entry(forw_packet_pos, tmp_node,
&bat_priv->forw_bat_list, list) {
if (can_aggregate_with(batman_packet,
+ bat_priv,
packet_len,
send_time,
direct_link,
--
1.7.5.3
11 years, 7 months
[B.A.T.M.A.N.] [PATCH] batman-adv: broadcast primary OGM on all active hard-interfaces
by Marek Lindner
The primary interface OGM has to be broadcasted on all hard-interfaces
even if the primary interface is not the first interface (if_num = 0).
Therefore the code has to compare the originating interface with the
primary interface instead of checking the if_num.
Reported-by: Linus Luessing <linus.luessing(a)web.de>
Signed-off-by: Marek Lindner <lindner_marek(a)yahoo.de>
---
send.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/send.c b/send.c
index 2f62b2e..4b8e11b 100644
--- a/send.c
+++ b/send.c
@@ -163,6 +163,7 @@ static void send_packet(struct forw_packet *forw_packet)
struct hard_iface *hard_iface;
struct net_device *soft_iface;
struct bat_priv *bat_priv;
+ struct hard_iface *primary_if = NULL;
struct batman_packet *batman_packet =
(struct batman_packet *)(forw_packet->skb->data);
int directlink = (batman_packet->flags & DIRECTLINK ? 1 : 0);
@@ -170,19 +171,23 @@ static void send_packet(struct forw_packet *forw_packet)
if (!forw_packet->if_incoming) {
pr_err("Error - can't forward packet: incoming iface not "
"specified\n");
- return;
+ goto out;
}
soft_iface = forw_packet->if_incoming->soft_iface;
bat_priv = netdev_priv(soft_iface);
if (forw_packet->if_incoming->if_status != IF_ACTIVE)
- return;
+ goto out;
+
+ primary_if = primary_if_get_selected(bat_priv);
+ if (!primary_if)
+ goto out;
/* multihomed peer assumed */
/* non-primary OGMs are only broadcasted on their interface */
if ((directlink && (batman_packet->ttl == 1)) ||
- (forw_packet->own && (forw_packet->if_incoming->if_num > 0))) {
+ (forw_packet->own && (forw_packet->if_incoming != primary_if))) {
/* FIXME: what about aggregated packets ? */
bat_dbg(DBG_BATMAN, bat_priv,
@@ -199,7 +204,7 @@ static void send_packet(struct forw_packet *forw_packet)
broadcast_addr);
forw_packet->skb = NULL;
- return;
+ goto out;
}
/* broadcast on every interface */
@@ -211,6 +216,10 @@ static void send_packet(struct forw_packet *forw_packet)
send_packet_to_if(forw_packet, hard_iface);
}
rcu_read_unlock();
+
+out:
+ if (primary_if)
+ hardif_free_ref(primary_if);
}
static void realloc_packet_buffer(struct hard_iface *hard_iface,
--
1.7.5.3
11 years, 7 months
[B.A.T.M.A.N.] [PATCH] batman-adv: pass a unique flag arg instead of a sequence of bool ones
by Antonio Quartulli
now tt_local_event() takes a flags argument instead of a sequence of
boolean values which would grow up with the time.
Signed-off-by: Antonio Quartulli <ordex(a)autistici.org>
---
translation-table.c | 21 +++++++++++----------
1 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/translation-table.c b/translation-table.c
index 4208dc7..796303d 100644
--- a/translation-table.c
+++ b/translation-table.c
@@ -143,8 +143,8 @@ static void tt_global_entry_free_ref(struct tt_global_entry *tt_global_entry)
kfree_rcu(tt_global_entry, rcu);
}
-static void tt_local_event(struct bat_priv *bat_priv, uint8_t op,
- const uint8_t *addr, bool roaming)
+static void tt_local_event(struct bat_priv *bat_priv, const uint8_t *addr,
+ int flags)
{
struct tt_change_node *tt_change_node;
@@ -153,10 +153,10 @@ static void tt_local_event(struct bat_priv *bat_priv, uint8_t op,
if (!tt_change_node)
return;
- tt_change_node->change.flags = op;
- if (roaming)
- tt_change_node->change.flags |= TT_CLIENT_ROAM;
+ /* NOPURGE flag has not to go on the wire */
+ flags &= ~TT_CLIENT_NOPURGE;
+ tt_change_node->change.flags = flags;
memcpy(tt_change_node->change.addr, addr, ETH_ALEN);
spin_lock_bh(&bat_priv->tt_changes_list_lock);
@@ -203,8 +203,6 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
if (!tt_local_entry)
goto out;
- tt_local_event(bat_priv, NO_FLAGS, addr, false);
-
bat_dbg(DBG_TT, bat_priv,
"Creating new local tt entry: %pM (ttvn: %d)\n", addr,
(uint8_t)atomic_read(&bat_priv->ttvn));
@@ -218,6 +216,8 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
if (compare_eth(addr, soft_iface->dev_addr))
tt_local_entry->flags |= TT_CLIENT_NOPURGE;
+ tt_local_event(bat_priv, addr, tt_local_entry->flags);
+
hash_add(bat_priv->tt_local_hash, compare_ltt, choose_orig,
tt_local_entry, &tt_local_entry->hash_entry);
@@ -386,7 +386,8 @@ void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
if (!tt_local_entry)
goto out;
- tt_local_event(bat_priv, TT_CLIENT_DEL, tt_local_entry->addr, roaming);
+ tt_local_event(bat_priv, tt_local_entry->addr,
+ tt_local_entry->flags | TT_CLIENT_DEL);
tt_local_del(bat_priv, tt_local_entry, message);
out:
if (tt_local_entry)
@@ -416,8 +417,8 @@ static void tt_local_purge(struct bat_priv *bat_priv)
TT_LOCAL_TIMEOUT * 1000))
continue;
- tt_local_event(bat_priv, TT_CLIENT_DEL,
- tt_local_entry->addr, false);
+ tt_local_event(bat_priv, tt_local_entry->addr,
+ tt_local_entry->flags | TT_CLIENT_DEL);
atomic_dec(&bat_priv->num_local_tt);
bat_dbg(DBG_TT, bat_priv, "Deleting local "
"tt entry (%pM): timed out\n",
--
1.7.3.4
11 years, 7 months
[B.A.T.M.A.N.] batman-adv 2011.1.0 network interface setup
by Max Ip
Hi all,
I setup the virtual interface bat0 which embeds wlan0 for my system.
As described in the batman-adv README file, I did
# insmod batman-adv.ko and
# echo bat0 > /sys/class/net/wlan0/batman_adv/mesh_iface
I can thus enable bat0 interface and start the batman-adv protocol in
multihop environment.
However, when I restart the computer, I need to again load the kernel
module and start the process from beginning.
I would like to run bat0 interface directly after restarting the
computer (like we have it for wlan0 or eth0)
Could you please help me how do I do this?
Thanks in advance
Max
11 years, 7 months
[B.A.T.M.A.N.] [PATCH] batman-adv: TT_RESPONSE with full table must contain only announced clients
by Antonio Quartulli
In case of TT_RESPONSE containing a full table, only clients already
announced can be sent. Therefore, clients added after the last OGM
sending must not be sent.
Signed-off-by: Antonio Quartulli <ordex(a)autistici.org>
---
translation-table.c | 12 +++++++++++-
types.h | 1 +
2 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/translation-table.c b/translation-table.c
index 4208dc7..6382955 100644
--- a/translation-table.c
+++ b/translation-table.c
@@ -211,6 +211,7 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
memcpy(tt_local_entry->addr, addr, ETH_ALEN);
tt_local_entry->last_seen = jiffies;
+ tt_local_entry->ttvn = (uint8_t)(atomic_read(&bat_priv->ttvn) + 1);
tt_local_entry->flags = NO_FLAGS;
atomic_set(&tt_local_entry->refcount, 2);
@@ -936,6 +937,14 @@ unlock:
return tt_req_node;
}
+static int tt_local_valid_entry(const void *entry_ptr, const void *data_ptr)
+{
+ const struct tt_local_entry *tt_local_entry = entry_ptr;
+ const struct bat_priv *bat_priv = data_ptr;
+
+ return (tt_local_entry->ttvn <= (uint8_t)atomic_read(&bat_priv->ttvn));
+}
+
static int tt_global_valid_entry(const void *entry_ptr, const void *data_ptr)
{
const struct tt_global_entry *tt_global_entry = entry_ptr;
@@ -1276,7 +1285,8 @@ static bool send_my_tt_response(struct bat_priv *bat_priv,
skb = tt_response_fill_table(tt_len, ttvn,
bat_priv->tt_local_hash,
- primary_if, NULL, NULL);
+ primary_if, tt_local_valid_entry,
+ bat_priv);
if (!skb)
goto out;
diff --git a/types.h b/types.h
index 582283a..b470c67 100644
--- a/types.h
+++ b/types.h
@@ -224,6 +224,7 @@ struct socket_packet {
struct tt_local_entry {
uint8_t addr[ETH_ALEN];
unsigned long last_seen;
+ uint8_t ttvn;
uint8_t flags;
atomic_t refcount;
struct rcu_head rcu;
--
1.7.3.4
11 years, 7 months
[B.A.T.M.A.N.] [PATCH 0/3] Implement the AP-Isolation mechanism
by Antonio Quartulli
This patchset introduces the AP-isolation functionality. As for common access
points, the AP-isolation is a mechanism that prevents clients to communicate
to each other. In batman-adv the AP-isolation, if activated, will prevent
"WIFI bridged-in clients" to communicate with any other "WIFI bridged-in
client".
The first patch introduces a mechanism which permit to detect the interface type
used by a client and to possibly mark its tt_local_entry in case of WIFI. This
information is then spread over the network within the TT announcements.
The other two patches implement the AP-isolation mechanism which exploits the
WIFI mark (on tt_entries) to prevent communications between WIFI clients.
The "AP-isolation check" is done either on the receiver and on the sender side.
Best regards,
Antonio Quartulli
11 years, 7 months
[B.A.T.M.A.N.] [PATCH] batman-adv: add_bcast_packet_to_list() takes the sending delay as parameter
by Antonio Quartulli
In order to make possible to use the broadcast list for delayed sendings
the "delay" parameter is now provided instead of using 1 as hardcoded
value.
Signed-off-by: Antonio Quartulli <ordex(a)autistici.org>
---
routing.c | 2 +-
send.c | 4 ++--
send.h | 2 +-
soft-interface.c | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/routing.c b/routing.c
index 0ce090c..2cb98be 100644
--- a/routing.c
+++ b/routing.c
@@ -1677,7 +1677,7 @@ int recv_bcast_packet(struct sk_buff *skb, struct hard_iface *recv_if)
spin_unlock_bh(&orig_node->bcast_seqno_lock);
/* rebroadcast packet */
- add_bcast_packet_to_list(bat_priv, skb);
+ add_bcast_packet_to_list(bat_priv, skb, 1);
/* broadcast for me */
interface_rx(recv_if->soft_iface, skb, recv_if, hdr_size);
diff --git a/send.c b/send.c
index 9a4f20c..708f99c 100644
--- a/send.c
+++ b/send.c
@@ -455,7 +455,7 @@ static void _add_bcast_packet_to_list(struct bat_priv *bat_priv,
* The skb is not consumed, so the caller should make sure that the
* skb is freed. */
int add_bcast_packet_to_list(struct bat_priv *bat_priv,
- const struct sk_buff *skb)
+ const struct sk_buff *skb, unsigned long delay)
{
struct hard_iface *primary_if = NULL;
struct forw_packet *forw_packet;
@@ -492,7 +492,7 @@ int add_bcast_packet_to_list(struct bat_priv *bat_priv,
/* how often did we send the bcast packet ? */
forw_packet->num_packets = 0;
- _add_bcast_packet_to_list(bat_priv, forw_packet, 1);
+ _add_bcast_packet_to_list(bat_priv, forw_packet, delay);
return NETDEV_TX_OK;
packet_free:
diff --git a/send.h b/send.h
index 633224a..1f2d1e8 100644
--- a/send.h
+++ b/send.h
@@ -31,7 +31,7 @@ void schedule_forward_packet(struct orig_node *orig_node,
int directlink,
struct hard_iface *if_outgoing);
int add_bcast_packet_to_list(struct bat_priv *bat_priv,
- const struct sk_buff *skb);
+ const struct sk_buff *skb, unsigned long delay);
void send_outstanding_bat_packet(struct work_struct *work);
void purge_outstanding_packets(struct bat_priv *bat_priv,
const struct hard_iface *hard_iface);
diff --git a/soft-interface.c b/soft-interface.c
index 2dcdbb7..3f20332 100644
--- a/soft-interface.c
+++ b/soft-interface.c
@@ -634,7 +634,7 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
bcast_packet->seqno =
htonl(atomic_inc_return(&bat_priv->bcast_seqno));
- add_bcast_packet_to_list(bat_priv, skb);
+ add_bcast_packet_to_list(bat_priv, skb, 1);
/* a copy is stored in the bcast list, therefore removing
* the original skb. */
--
1.7.3.4
11 years, 7 months
[B.A.T.M.A.N.] [PATCH] batman-adv: unify flags for tt_change/tt_local_entry/tt_global_entry
by Antonio Quartulli
The tt_local_entry structure now has a 'flags' field. This helps to
unify the flags format to all the client related structures (tt_global_entry
and tt_change). The 'never_purge' field is now encoded in the 'flags' one.
Moreover 'enum tt_change_flags' is now called 'enum tt_client_flags' and the
defined values apply to the tt_local_entry, tt_global_entry and the tt_change
'flags' field.
Signed-off-by: Antonio Quartulli <ordex(a)autistici.org>
---
packet.h | 9 +++++----
translation-table.c | 13 ++++++-------
translation-table.h | 3 +--
types.h | 2 +-
4 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/packet.h b/packet.h
index c5f081d..8fd2fde 100644
--- a/packet.h
+++ b/packet.h
@@ -78,10 +78,11 @@ enum tt_query_flags {
TT_FULL_TABLE = 1 << 2
};
-/* TT_CHANGE flags */
-enum tt_change_flags {
- TT_CHANGE_DEL = 0x01,
- TT_CLIENT_ROAM = 0x02
+/* TT_CLIENT flags */
+enum tt_client_flags {
+ TT_CLIENT_DEL = 0x01,
+ TT_CLIENT_ROAM = 0x02,
+ TT_CLIENT_NOPURGE = 0x04
};
struct batman_packet {
diff --git a/translation-table.c b/translation-table.c
index 5f1fcd5..4208dc7 100644
--- a/translation-table.c
+++ b/translation-table.c
@@ -211,13 +211,12 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
memcpy(tt_local_entry->addr, addr, ETH_ALEN);
tt_local_entry->last_seen = jiffies;
+ tt_local_entry->flags = NO_FLAGS;
atomic_set(&tt_local_entry->refcount, 2);
/* the batman interface mac address should never be purged */
if (compare_eth(addr, soft_iface->dev_addr))
- tt_local_entry->never_purge = 1;
- else
- tt_local_entry->never_purge = 0;
+ tt_local_entry->flags |= TT_CLIENT_NOPURGE;
hash_add(bat_priv->tt_local_hash, compare_ltt, choose_orig,
tt_local_entry, &tt_local_entry->hash_entry);
@@ -387,7 +386,7 @@ void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
if (!tt_local_entry)
goto out;
- tt_local_event(bat_priv, TT_CHANGE_DEL, tt_local_entry->addr, roaming);
+ tt_local_event(bat_priv, TT_CLIENT_DEL, tt_local_entry->addr, roaming);
tt_local_del(bat_priv, tt_local_entry, message);
out:
if (tt_local_entry)
@@ -410,14 +409,14 @@ static void tt_local_purge(struct bat_priv *bat_priv)
spin_lock_bh(list_lock);
hlist_for_each_entry_safe(tt_local_entry, node, node_tmp,
head, hash_entry) {
- if (tt_local_entry->never_purge)
+ if (tt_local_entry->flags & TT_CLIENT_NOPURGE)
continue;
if (!is_out_of_time(tt_local_entry->last_seen,
TT_LOCAL_TIMEOUT * 1000))
continue;
- tt_local_event(bat_priv, TT_CHANGE_DEL,
+ tt_local_event(bat_priv, TT_CLIENT_DEL,
tt_local_entry->addr, false);
atomic_dec(&bat_priv->num_local_tt);
bat_dbg(DBG_TT, bat_priv, "Deleting local "
@@ -1335,7 +1334,7 @@ static void _tt_update_changes(struct bat_priv *bat_priv,
int i;
for (i = 0; i < tt_num_changes; i++) {
- if ((tt_change + i)->flags & TT_CHANGE_DEL)
+ if ((tt_change + i)->flags & TT_CLIENT_DEL)
tt_global_del(bat_priv, orig_node,
(tt_change + i)->addr,
"tt removed by changes",
diff --git a/translation-table.h b/translation-table.h
index 1cd2d39..460e583 100644
--- a/translation-table.h
+++ b/translation-table.h
@@ -30,8 +30,7 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr);
void tt_local_remove(struct bat_priv *bat_priv,
const uint8_t *addr, const char *message, bool roaming);
int tt_local_seq_print_text(struct seq_file *seq, void *offset);
-void tt_global_add_orig(struct bat_priv *bat_priv,
- struct orig_node *orig_node,
+void tt_global_add_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
const unsigned char *tt_buff, int tt_buff_len);
int tt_global_add(struct bat_priv *bat_priv,
struct orig_node *orig_node, const unsigned char *addr,
diff --git a/types.h b/types.h
index 85cf122..582283a 100644
--- a/types.h
+++ b/types.h
@@ -224,7 +224,7 @@ struct socket_packet {
struct tt_local_entry {
uint8_t addr[ETH_ALEN];
unsigned long last_seen;
- char never_purge;
+ uint8_t flags;
atomic_t refcount;
struct rcu_head rcu;
struct hlist_node hash_entry;
--
1.7.3.4
11 years, 7 months
[B.A.T.M.A.N.] [PATCH] MAINTAINERS: Remove Sven Eckelmann from BATMAN ADVANCED
by Sven Eckelmann
I cannot speak on behalf of the batman-adv developers due to conflicts
in the opinion about the ongoing development. The batman-adv module is
still maintained by Marek Lindner and Simon Wunderlich. Those are the
main persons behind the visions of batman-adv. Therefore, the state of
module hasn't changed.
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
Cc: b.a.t.m.a.n(a)lists.open-mesh.org
---
Just as small background information:
https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2011-June/005020.html
expresses the same problems I have with the changes and I can honestly
not speak on behalf the developers when I my inner mind is against the
changes and I would only be an additional, unneeded barrier.
This decission was made in context of the changes which are on the
horizon. I personally don't know what is coming, but that many things
are changing in an incompatible way. I would like to leave here instead
to destroy some friendships.
MAINTAINERS | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index dc2a7c8..9597832 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1390,7 +1390,6 @@ F: include/linux/backlight.h
BATMAN ADVANCED
M: Marek Lindner <lindner_marek(a)yahoo.de>
M: Simon Wunderlich <siwu(a)hrz.tu-chemnitz.de>
-M: Sven Eckelmann <sven(a)narfation.org>
L: b.a.t.m.a.n(a)lists.open-mesh.org
W: http://www.open-mesh.org/
S: Maintained
--
1.7.5.3
11 years, 7 months