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 <or...@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 >
signature.asc
Description: Digital signature