Hey Antonio,
I've tested this (just test, no code review) in my 2.6.32 qemu (Debian squeeze, iproute from wheezy). It generally loads and batctl if add/del seems to work, but there is something weird going on with bridge interaction. After calling the following 3 commands:
brctl addbr br0 batctl if add eth0 ip link set dev eth0 master br0
I would expect that eth0 moved from bat0 to br0 (or some error is reported). But what I see is:
root@debian:~# batctl if eth0: active br0: not in use root@debian:~# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no
Even more weird, after doing batctl if del eth0 or batctl if del br0, I don't get any output, but both devices remain in bat0 (according to batctl if). But I do get some output that it's trying to remove eth0:
[ 102.788930] batman_adv: bat0: Interface deactivated: eth0 [ 102.788935] batman_adv: bat0: Removing interface: eth0
Note that I don't have this behaviour on my host machine (3.2.0, Debian unstable kernel).
So I can't ack this now, although I don't know if the problem is in this patch, in the current batman-adv/netlink implementation or somewhere in 2.6.32 kernel release.
Cheers, Simon
On Sun, Feb 17, 2013 at 03:43:04PM +0100, Antonio Quartulli wrote:
This patches enable the new rtnl ops to compile on kernels starting from 2.6.32
Signed-off-by: Antonio Quartulli ordex@autistici.org
Could not be uglier. *Compile tested only* because linux-2.6.32 does not compile on my laptop
compat.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+)
diff --git a/compat.h b/compat.h index 885e551..de22e2b 100644 --- a/compat.h +++ b/compat.h @@ -71,6 +71,9 @@ static inline void batadv_this_cpu_add(uint64_t *count_ptr, size_t count) put_cpu(); }
+#define batadv_softif_destroy_netlink(dev, head) batadv_softif_destroy_netlink(dev) +#define unregister_netdevice_queue(dev, head) unregister_netdevice(dev)
#endif /* < KERNEL_VERSION(2, 6, 33) */
@@ -132,6 +135,43 @@ static inline int batadv_param_set_copystring(const char *val, #define kstrtoul strict_strtoul #define kstrtol strict_strtol
+#define batadv_softif_slave_add(x, y) \ +batadv_softif_slave_add(struct net_device *dev, struct ifreq *rq, int cmd)\ +{\
- return 0;\
+}\ +static int __batadv_softif_slave_add(x, y)
+#define batadv_softif_slave_del(x, y) \ +__batadv_softif_slave_del(struct net_device *dev, struct net_device *slave_dev);\ +static int batadv_softif_slave_del(struct net_device *dev, struct ifreq *rq, int cmd)\ +{\
- struct batadv_priv *bat_priv = netdev_priv(dev);\
- struct net_device *slave_dev;\
- int ret;\
- if (!capable(CAP_NET_ADMIN))\
return -EPERM;\
- slave_dev = dev_get_by_index(&init_net, rq->ifr_ifindex);\
- if (!dev)\
return -EINVAL;\
- switch(cmd) {\
- case SIOCBRADDIF:\
ret = __batadv_softif_slave_add(bat_priv->soft_iface, slave_dev);\
- case SIOCBRDELIF:\
ret = __batadv_softif_slave_del(bat_priv->soft_iface, slave_dev);\
- default:\
pr_debug("batman-adv does not support ioctl 0x%x\n", cmd);\
return -EOPNOTSUPP;\
- }\
+\
- dev_put(slave_dev);\
- return ret;\
+}\ +static int __batadv_softif_slave_del(x, y)
+#define ndo_add_slave ndo_do_ioctl +#define ndo_del_slave ndo_do_ioctl
#endif /* < KERNEL_VERSION(2, 6, 39) */
-- 1.8.1.2