ndisc: add __ndisc_opt_addr_data function
authorAlexander Aring <aar@pengutronix.de>
Wed, 15 Jun 2016 19:20:20 +0000 (21:20 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Jun 2016 03:41:22 +0000 (20:41 -0700)
This patch adds __ndisc_opt_addr_data as low-level function for
ndisc_opt_addr_data which doesn't depend on net_device parameter.

Cc: David S. Miller <davem@davemloft.net>
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: James Morris <jmorris@namei.org>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Patrick McHardy <kaber@trash.net>
Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com>
Signed-off-by: Alexander Aring <aar@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ndisc.h

index 4cee82654fe5d1095922dad1f891a233617f7940..c8962adf24d015db8ff902bba64bb50e2b278db3 100644 (file)
@@ -138,17 +138,23 @@ static inline int ndisc_opt_addr_space(struct net_device *dev)
                                      ndisc_addr_option_pad(dev->type));
 }
 
-static inline u8 *ndisc_opt_addr_data(struct nd_opt_hdr *p,
-                                     struct net_device *dev)
+static inline u8 *__ndisc_opt_addr_data(struct nd_opt_hdr *p,
+                                       unsigned char addr_len, int prepad)
 {
        u8 *lladdr = (u8 *)(p + 1);
        int lladdrlen = p->nd_opt_len << 3;
-       int prepad = ndisc_addr_option_pad(dev->type);
-       if (lladdrlen != ndisc_opt_addr_space(dev))
+       if (lladdrlen != __ndisc_opt_addr_space(addr_len, prepad))
                return NULL;
        return lladdr + prepad;
 }
 
+static inline u8 *ndisc_opt_addr_data(struct nd_opt_hdr *p,
+                                     struct net_device *dev)
+{
+       return __ndisc_opt_addr_data(p, dev->addr_len,
+                                    ndisc_addr_option_pad(dev->type));
+}
+
 static inline u32 ndisc_hashfn(const void *pkey, const struct net_device *dev, __u32 *hash_rnd)
 {
        const u32 *p32 = pkey;