The following commit has been merged in the merge/master branch:
commit 2e0a2972e35402540002a0d142fb92b4f0bebb55
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Tue Feb 23 18:25:35 2016 +0100
batman-adv: Depend on CFG80211 for BATMAN_V
The B.A.T.M.A.N. V metric can uses cfg80211_get_station to calculate the
expected throughput for ieee80211 devices. This function only exists when
the kernel was compile with CONFIG_CFG80211 and thus the
BATMAN_ADV_BATMAN_V option has to depend on it.
Fixes: 5c3245172c01 ("batman-adv: ELP - compute the metric based on the estimated throughput")
Reported-by: Antonio Quartulli <antonio.quartulli(a)open-mesh.com>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
Signed-off-by: Marek Lindner <mareklindner(a)neomailbox.ch>
diff --git a/net/batman-adv/Kconfig b/net/batman-adv/Kconfig
index 5c148a8..e651dc9 100644
--- a/net/batman-adv/Kconfig
+++ b/net/batman-adv/Kconfig
@@ -17,7 +17,7 @@ config BATMAN_ADV
config BATMAN_ADV_BATMAN_V
bool "B.A.T.M.A.N. V protocol (experimental)"
- depends on BATMAN_ADV
+ depends on BATMAN_ADV && CFG80211
default n
help
This option enables the B.A.T.M.A.N. V protocol, the successor
--
linux integration
The annotated tag, batman-adv-for-davem has been updated
to 439dc0ded49c1c791e00c7fc0fdfb43690f97e38 (tag)
from 72be4ac98384571e948f067f414bf7fc4d1e8594 (which is now obsolete)
tagging 57ef970f0bbf3309af88b442ba16eaf7ed756f45 (commit)
replaces v4.5-rc5
tagged by Antonio Quartulli
on Sun Feb 28 04:00:11 2016 +0800
- Shortlog ------------------------------------------------------------
With this patchset we finally introduce our new routing protocol:
B.A.T.M.A.N. V. Its implementation started quite some years ago,
but due to the big changes being introduced it took a while to be
discussed, designed, worked, re-worked, tested and debugged (well,
we're never done with the latest). Such work has basically seen
involved all the core contributors: namely Linus Lüssing, Marek
Lindner, Simon Wunderlich, Sven Eckelmann and me.
The new protocol is divided into two main subcomponents, called
respectively ELP and OGMv2. The former is in charge of
dealing with the neighbour discovery and link quality estimation,
while the latter implements the algorithm that spreads the
metrics around the network and computes optimal paths.
The biggest change introduced with B.A.T.M.A.N. V is the new
metric: the protocol won't rely on packet loss anymore, but it
will use the estimated throughput extracted directly from the
wifi driver (when available) by querying cfg80211.
Batman-adv will also send some unicast probing packets when
an interface is not used for payload traffic to make sure that
such values are current.
The new protocol can be compiled-in or not like other
features we have and when selected will pull in CFG80211 as
dependency for the reason described above.
Thanks to the big work brought up in the past by Marek Lindner,
batman-adv can easily deal several protocol implementations,
therefore compiling in this new version does not exclude the
older.
This means that the user is offered the option to choose
the protocol when creating the mesh interface (default is the
old one to keep backward compatibility).
Along with the protocol there are some sysfs knobs that are
introduced to fine tune some of its behaviours, but users
are recommended to keep the default values unless they know
what they are doing.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJW0gBPAAoJENpFlCjNi1MRSg4P/0j2xqBrzSO5d+LEAxAJGRLf
T1DmyCliFqMVuRAXx1ax34vipEG6VXmH1pwVd/RqAMUTlq2f+2Jzbql8rTD2BamZ
v9JNTxQ9gndXzQpVABQEkoaO5jj7CGFgSypqqAR8C33MQzLZ3lTGPPTjuG1Fqfk4
2tQVOKY7BMypMl1YOoaWKWJC9eZqiQGzTd3uwW8ADagIjLxLZ7YORbUC1ziAefBF
zyb6UxlkL452Rd1xOd/pxcSUi1r9TledmheiuYf9wXREK2ct8sHPbIBGxRxxveCR
Ga+lKtlK6gk1BCIIEOrBNB7yX5BqSBEQbzsLLxPlcnzi++405n1jz1/10zQZTfdV
GtuOSApOOeEXLaSc3/N4OMeeCpc5E5LhoMsc1jBrnGydlP/AB7QDJWg4VhROlPZs
YO+RFM7rB0fC6F6B6GylncoyD9vbIanltzjvFGDjArXu1gvDt3am06hDWe5XO47A
Mloki1y9vFlk7j0uFYsSibt281oAIWin4plxSuIEyCEU0pangoRaAdVJfpOuGBDH
dj0BfKqfl6QRkiZqrJ1lQUcTph8JhdqNibq427sg8fKKp0VwQVNhWWrAtX9BxMqE
fSQ81+pNOZi/6wW2enWaMmeSuksMe4eOaLAxxHAmkkPt06WovplbCVU6vhtuAeNA
nGVlTp2rbWb43C6gKMTd
=0BKE
-----END PGP SIGNATURE-----
Andrew Lunn (1):
batman-adv: Avoid endless loop in bat-on-bat netdevice check
Antonio Quartulli (12):
batman-adv: fix kerneldoc for DAT functions
batman-adv: fix kerneldoc for TT functions
batman-adv: add kernel doc for AP isolation attributes in bat_priv
batman-adv: remove unused BATADV_BONDING_TQ_THRESHOLD constant
batman-adv: OGMv2 - add basic infrastructure
batman-adv: OGMv2 - implement originators logic
batman-adv: add throughput override attribute to hard_ifaces
batman-adv: keep track of when unicast packets are sent
batman-adv: ELP - compute the metric based on the estimated throughput
batman-adv: ELP - send unicast ELP packets for throughput sampling
batman-adv: B.A.T.M.A.N. V - implement neighbor comparison API calls
batman-adv: B.A.T.M.A.N. V - implement bat_orig_print API
David S. Miller (4):
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Linus Luessing (5):
batman-adv: Add hard_iface specific sysfs wrapper macros for UINT
batman-adv: ELP - adding basic infrastructure
batman-adv: ELP - creating neighbor structures
batman-adv: ELP - adding sysfs parameter for elp interval
batman-adv: B.A.T.M.A.N. V - implement bat_neigh_print API
Marek Lindner (1):
batman-adv: kernel doc readability updates
Simon Wunderlich (4):
batman-adv: Update/repair bridge loop avoidance kerneldoc
batman-adv: add kerneldoc for batadv_iv_ogm_aggr_packet
batman-adv: add seqno maximum age and protection start flag parameters
batman-adv: Start new development cycle
Sven Eckelmann (51):
batman-adv: Fix kerneldoc parsing of structs/enums
batman-adv: Remove kerneldoc for missing parameters
batman-adv: Fix names in kerneldoc of functions
batman-adv: Drop invalid kerneldoc for variable batadv_vlan_attrs
batman-adv: Fix kerneldoc parsing of return description
batman-adv: Fix kerneldoc of main functions
batman-adv: Fix kerneldoc of network-coding functions
batman-adv: Fix kernel-doc for batadv_claim_free_ref
batman-adv: update copyright years for 2016
batman-adv: Switch to HTTPS version of links
batman-adv: Drop reference to netdevice on last reference
batman-adv: Add lockdep assert for container_list_lock
batman-adv: Convert batadv_hardif_neigh_node to kref
batman-adv: Convert batadv_gw_node to kref
batman-adv: Convert batadv_softif_vlan to kref
batman-adv: Convert batadv_bla_backbone_gw to kref
batman-adv: Convert batadv_bla_claim to kref
batman-adv: Convert batadv_nc_node to kref
batman-adv: Convert batadv_nc_path to kref
batman-adv: Convert batadv_dat_entry to kref
batman-adv: Convert batadv_tvlv_container to kref
batman-adv: Convert batadv_tvlv_handler to kref
batman-adv: Convert batadv_tt_orig_list_entry to kref
batman-adv: Convert batadv_neigh_ifinfo to kref
batman-adv: Convert batadv_orig_ifinfo to kref
batman-adv: Convert batadv_neigh_node to kref
batman-adv: Convert batadv_hard_iface to kref
batman-adv: Convert batadv_orig_node_vlan to kref
batman-adv: Convert batadv_orig_node to kref
batman-adv: Convert batadv_tt_common_entry to kref
batman-adv: Only put gw_node list reference when removed
batman-adv: Only put orig_node_vlan list reference when removed
batman-adv: Rename batadv_orig_node *_free_ref function to *_put
batman-adv: Rename batadv_hardif *_free_ref function to *_put
batman-adv: Rename batadv_neigh_node *_free_ref function to *_put
batman-adv: Rename batadv_neigh_ifinfo *_free_ref function to *_put
batman-adv: Rename batadv_orig_ifinfo *_free_ref function to *_put
batman-adv: Rename batadv_hardif_neigh *_free_ref function to *_put
batman-adv: Rename batadv_backbone_gw *_free_ref function to *_put
batman-adv: Rename batadv_claim *_free_ref function to *_put
batman-adv: Rename batadv_dat_entry *_free_ref function to *_put
batman-adv: Rename batadv_gw_node *_free_ref function to *_put
batman-adv: Rename batadv_tvlv_handler *_free_ref function to *_put
batman-adv: Rename batadv_tvlv_container *_free_ref function to *_put
batman-adv: Rename batadv_softif_vlan *_free_ref function to *_put
batman-adv: Rename batadv_nc_node *_free_ref function to *_put
batman-adv: Rename batadv_nc_path *_free_ref function to *_put
batman-adv: Rename batadv_orig_node_vlan *_free_ref function to *_put
batman-adv: Rename batadv_tt_local_entry *_free_ref function to *_put
batman-adv: Rename batadv_tt_global_entry *_free_ref function to *_put
batman-adv: Rename batadv_tt_orig_list_entry *_free_ref function to *_put
-----------------------------------------------------------------------
--
linux integration
The following commit has been merged in the merge/master branch:
commit 2808f92a9e3e3a920ac2c40710a0fedf9f7a4525
Author: Andrew Lunn <andrew(a)lunn.ch>
Date: Thu Feb 11 22:15:57 2016 +0100
batman-adv: Avoid endless loop in bat-on-bat netdevice check
batman-adv checks in different situation if a new device is already on top
of a different batman-adv device. This is done by getting the iflink of a
device and all its parent. It assumes that this iflink is always a parent
device in an acyclic graph. But this assumption is broken by devices like
veth which are actually a pair of two devices linked to each other. The
recursive check would therefore get veth0 when calling dev_get_iflink on
veth1. And it gets veth0 when calling dev_get_iflink with veth1.
Creating a veth pair and loading batman-adv freezes parts of the system
ip link add veth0 type veth peer name veth1
modprobe batman-adv
An RCU stall will be detected on the system which cannot be fixed.
INFO: rcu_sched self-detected stall on CPU
1: (5264 ticks this GP) idle=3e9/140000000000001/0
softirq=144683/144686 fqs=5249
(t=5250 jiffies g=46 c=45 q=43)
Task dump for CPU 1:
insmod R running task 0 247 245 0x00000008
ffffffff8151f140 ffffffff8107888e ffff88000fd141c0 ffffffff8151f140
0000000000000000 ffffffff81552df0 ffffffff8107b420 0000000000000001
ffff88000e3fa700 ffffffff81540b00 ffffffff8107d667 0000000000000001
Call Trace:
<IRQ> [<ffffffff8107888e>] ? rcu_dump_cpu_stacks+0x7e/0xd0
[<ffffffff8107b420>] ? rcu_check_callbacks+0x3f0/0x6b0
[<ffffffff8107d667>] ? hrtimer_run_queues+0x47/0x180
[<ffffffff8107cf9d>] ? update_process_times+0x2d/0x50
[<ffffffff810873fb>] ? tick_handle_periodic+0x1b/0x60
[<ffffffff810290ae>] ? smp_trace_apic_timer_interrupt+0x5e/0x90
[<ffffffff813bbae2>] ? apic_timer_interrupt+0x82/0x90
<EOI> [<ffffffff812c3fd7>] ? __dev_get_by_index+0x37/0x40
[<ffffffffa0031f3e>] ? batadv_hard_if_event+0xee/0x3a0 [batman_adv]
[<ffffffff812c5801>] ? register_netdevice_notifier+0x81/0x1a0
[...]
This can be avoided by checking if two devices are each others parent and
stopping the check in this situation.
Fixes: 3d48811b27f5 ("batman-adv: prevent using any virtual device created on batman-adv as hard-interface")
Signed-off-by: Andrew Lunn <andrew(a)lunn.ch>
[sven(a)narfation.org: rewritten description, extracted fix]
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
Signed-off-by: Marek Lindner <mareklindner(a)neomailbox.ch>
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index aea4d06..730cfa8 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -79,6 +79,28 @@ out:
}
/**
+ * batadv_mutual_parents - check if two devices are each others parent
+ * @dev1: 1st net_device
+ * @dev2: 2nd net_device
+ *
+ * veth devices come in pairs and each is the parent of the other!
+ *
+ * Return: true if the devices are each others parent, otherwise false
+ */
+static bool batadv_mutual_parents(const struct net_device *dev1,
+ const struct net_device *dev2)
+{
+ int dev1_parent_iflink = dev_get_iflink(dev1);
+ int dev2_parent_iflink = dev_get_iflink(dev2);
+
+ if (!dev1_parent_iflink || !dev2_parent_iflink)
+ return false;
+
+ return (dev1_parent_iflink == dev2->ifindex) &&
+ (dev2_parent_iflink == dev1->ifindex);
+}
+
+/**
* batadv_is_on_batman_iface - check if a device is a batman iface descendant
* @net_dev: the device to check
*
@@ -111,6 +133,9 @@ static bool batadv_is_on_batman_iface(const struct net_device *net_dev)
if (WARN(!parent_dev, "Cannot find parent device"))
return false;
+ if (batadv_mutual_parents(net_dev, parent_dev))
+ return false;
+
ret = batadv_is_on_batman_iface(parent_dev);
return ret;
--
linux integration
Repository : ssh://git@open-mesh.org/batman-adv
On branch : next
>---------------------------------------------------------------
commit 2e0a2972e35402540002a0d142fb92b4f0bebb55
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Tue Feb 23 18:25:35 2016 +0100
batman-adv: Depend on CFG80211 for BATMAN_V
The B.A.T.M.A.N. V metric can uses cfg80211_get_station to calculate the
expected throughput for ieee80211 devices. This function only exists when
the kernel was compile with CONFIG_CFG80211 and thus the
BATMAN_ADV_BATMAN_V option has to depend on it.
Fixes: 5c3245172c01 ("batman-adv: ELP - compute the metric based on the estimated throughput")
Reported-by: Antonio Quartulli <antonio.quartulli(a)open-mesh.com>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
Signed-off-by: Marek Lindner <mareklindner(a)neomailbox.ch>
>---------------------------------------------------------------
2e0a2972e35402540002a0d142fb92b4f0bebb55
net/batman-adv/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/batman-adv/Kconfig b/net/batman-adv/Kconfig
index 5c148a8..e651dc9 100644
--- a/net/batman-adv/Kconfig
+++ b/net/batman-adv/Kconfig
@@ -17,7 +17,7 @@ config BATMAN_ADV
config BATMAN_ADV_BATMAN_V
bool "B.A.T.M.A.N. V protocol (experimental)"
- depends on BATMAN_ADV
+ depends on BATMAN_ADV && CFG80211
default n
help
This option enables the B.A.T.M.A.N. V protocol, the successor
The annotated tag, batman-adv-for-davem has been updated
to 72be4ac98384571e948f067f414bf7fc4d1e8594 (tag)
from a1624699d0d3744f75086e67d805d04fdf8eb45b (which is now obsolete)
tagging 7e2366c6267d4ea257c4d0deb2fcf0744749de5f (commit)
replaces v4.5-rc5
tagged by Antonio Quartulli
on Tue Feb 23 13:53:24 2016 +0800
- Shortlog ------------------------------------------------------------
This is a cleanup patchset: first the BATADV_BONDING_TQ_THRESHOLD
constant gets removed as it was defined but not used anywhere,
then all our *_free_ref functions are renamed to *_put in order
to follow the kernel naming convention by Sven Eckelmann.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJWy/PaAAoJENpFlCjNi1MRZbYP/2OCcYUSs2DdbcYsdhPLp7Ny
3nsgc863uSZDrugNQVVppa8rWMeJAEwMomYYw4PdHI4hQ03meUQtB3AqvdHlJJXf
MdtVm7U17Nlkq9X81qN4enXbME2hTPvZ+xLPojfhcWNy0C+q/aNbYewzdNaRPVE5
pBdbD9iGMK3Umbfcec6ZOmx8De7vwbl9ngX/YZ8ZxAj9SE5YPzs+l+WvZrWcBuE3
FhHAWzAizS4224ZLdlOhuP+9PwHqf+x9r5fqEIcIdbnVO5TA1+Ws0pl7u3Tbv3Nr
9XNKNVhLSQEVB0ALWC9YhOknH4SbbEqhzd/P4U02n+OMkexS7a0cojmdjL4aegwr
kseryEMELeudwMRMty1lbYvCsHoiOnd04BJ2S9URjEPsZ9jllFBO93Y/l6JLS/2H
+zwZSDecgX4DJAjRIlnvKjNW80cZ/G5QRkqgeTkS8LO6TFuysrZFtIADnp29pgq6
oc3LpvqguRIQgc7yhQa4886Bt/JRe85e2KOL9To8gFqc1OvZjd2Ri0hBi2RaObf5
/6LkL9LDM4B9BFcNkyTJOnBIk2sB841tsgUPm4MvydfAjVRvdyYIWHfSc8PR1WMK
ndWcVkclLtSJ0x8bhlLJYo6hN6f+IZczwzbk9Z3hSP5WsS4o5cA3LYjxI4+zHPsz
A4pO2NVhc7K36rYxYMGR
=1jap
-----END PGP SIGNATURE-----
Andrew Lunn (1):
batman-adv: Avoid endless loop in bat-on-bat netdevice check
Antonio Quartulli (4):
batman-adv: fix kerneldoc for DAT functions
batman-adv: fix kerneldoc for TT functions
batman-adv: add kernel doc for AP isolation attributes in bat_priv
batman-adv: remove unused BATADV_BONDING_TQ_THRESHOLD constant
David S. Miller (4):
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Marek Lindner (1):
batman-adv: kernel doc readability updates
Simon Wunderlich (3):
batman-adv: Update/repair bridge loop avoidance kerneldoc
batman-adv: add kerneldoc for batadv_iv_ogm_aggr_packet
batman-adv: add seqno maximum age and protection start flag parameters
Sven Eckelmann (51):
batman-adv: Fix kerneldoc parsing of structs/enums
batman-adv: Remove kerneldoc for missing parameters
batman-adv: Fix names in kerneldoc of functions
batman-adv: Drop invalid kerneldoc for variable batadv_vlan_attrs
batman-adv: Fix kerneldoc parsing of return description
batman-adv: Fix kerneldoc of main functions
batman-adv: Fix kerneldoc of network-coding functions
batman-adv: Fix kernel-doc for batadv_claim_free_ref
batman-adv: update copyright years for 2016
batman-adv: Switch to HTTPS version of links
batman-adv: Drop reference to netdevice on last reference
batman-adv: Add lockdep assert for container_list_lock
batman-adv: Convert batadv_hardif_neigh_node to kref
batman-adv: Convert batadv_gw_node to kref
batman-adv: Convert batadv_softif_vlan to kref
batman-adv: Convert batadv_bla_backbone_gw to kref
batman-adv: Convert batadv_bla_claim to kref
batman-adv: Convert batadv_nc_node to kref
batman-adv: Convert batadv_nc_path to kref
batman-adv: Convert batadv_dat_entry to kref
batman-adv: Convert batadv_tvlv_container to kref
batman-adv: Convert batadv_tvlv_handler to kref
batman-adv: Convert batadv_tt_orig_list_entry to kref
batman-adv: Convert batadv_neigh_ifinfo to kref
batman-adv: Convert batadv_orig_ifinfo to kref
batman-adv: Convert batadv_neigh_node to kref
batman-adv: Convert batadv_hard_iface to kref
batman-adv: Convert batadv_orig_node_vlan to kref
batman-adv: Convert batadv_orig_node to kref
batman-adv: Convert batadv_tt_common_entry to kref
batman-adv: Only put gw_node list reference when removed
batman-adv: Only put orig_node_vlan list reference when removed
batman-adv: Rename batadv_orig_node *_free_ref function to *_put
batman-adv: Rename batadv_hardif *_free_ref function to *_put
batman-adv: Rename batadv_neigh_node *_free_ref function to *_put
batman-adv: Rename batadv_neigh_ifinfo *_free_ref function to *_put
batman-adv: Rename batadv_orig_ifinfo *_free_ref function to *_put
batman-adv: Rename batadv_hardif_neigh *_free_ref function to *_put
batman-adv: Rename batadv_backbone_gw *_free_ref function to *_put
batman-adv: Rename batadv_claim *_free_ref function to *_put
batman-adv: Rename batadv_dat_entry *_free_ref function to *_put
batman-adv: Rename batadv_gw_node *_free_ref function to *_put
batman-adv: Rename batadv_tvlv_handler *_free_ref function to *_put
batman-adv: Rename batadv_tvlv_container *_free_ref function to *_put
batman-adv: Rename batadv_softif_vlan *_free_ref function to *_put
batman-adv: Rename batadv_nc_node *_free_ref function to *_put
batman-adv: Rename batadv_nc_path *_free_ref function to *_put
batman-adv: Rename batadv_orig_node_vlan *_free_ref function to *_put
batman-adv: Rename batadv_tt_local_entry *_free_ref function to *_put
batman-adv: Rename batadv_tt_global_entry *_free_ref function to *_put
batman-adv: Rename batadv_tt_orig_list_entry *_free_ref function to *_put
-----------------------------------------------------------------------
--
linux integration
The annotated tag, v4.5-rc5 has been created
at e91f74b3b3c3aa2b9fc7720ff24ca63fefe467b4 (tag)
tagging 81f70ba233d5f660e1ea5fe23260ee323af5d53a (commit)
replaces v4.5-rc4
tagged by Linus Torvalds
on Sat Feb 20 13:39:42 2016 -0800
- Shortlog ------------------------------------------------------------
Linux 4.5-rc5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJWyN0eAAoJEHm+PkMAQRiGqIAIAKKodaqX5ACJhTRozj3GN5iV
dDHU/SJQj4nIyJecaCVAJIBa3gvAX6GyY+Jg4JKJ4TKAdR0Hd/3EwOWIR+0+BQIM
0MqmB0CRLzq42AOQtpDUdwB+OTE8jFQFQd2gFKuQYJJ61ppykCC36OWV0bTfQLSV
b2esO4Ry6eoQnDMw8oT52ncUIZEvQ2DZE3L6tNDEPD/0je14GWkV1Fx1+X2jb9cB
diFA2TmaEEXMHNT1NCLSQ+D7QefXV3mFl85leNlFi5QQNy7ZdSh7kvvOodMQ2uAS
qa9V8Uk6LZYv5O71+Jr5Rmlqh3GxNRCMXu2tlMd2gtw8ApEvBw6XoL5YZYE13Lk=
=3HMg
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration