|
@@ -150,11 +150,10 @@ struct neigh_table nd_tbl = {
|
|
};
|
|
};
|
|
EXPORT_SYMBOL_GPL(nd_tbl);
|
|
EXPORT_SYMBOL_GPL(nd_tbl);
|
|
|
|
|
|
-static void ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data)
|
|
|
|
|
|
+static void __ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data,
|
|
|
|
+ int data_len, int pad)
|
|
{
|
|
{
|
|
- int pad = ndisc_addr_option_pad(skb->dev->type);
|
|
|
|
- int data_len = skb->dev->addr_len;
|
|
|
|
- int space = ndisc_opt_addr_space(skb->dev);
|
|
|
|
|
|
+ int space = __ndisc_opt_addr_space(data_len, pad);
|
|
u8 *opt = skb_put(skb, space);
|
|
u8 *opt = skb_put(skb, space);
|
|
|
|
|
|
opt[0] = type;
|
|
opt[0] = type;
|
|
@@ -172,6 +171,13 @@ static void ndisc_fill_addr_option(struct sk_buff *skb, int type, void *data)
|
|
memset(opt, 0, space);
|
|
memset(opt, 0, space);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline void ndisc_fill_addr_option(struct sk_buff *skb, int type,
|
|
|
|
+ void *data)
|
|
|
|
+{
|
|
|
|
+ __ndisc_fill_addr_option(skb, type, data, skb->dev->addr_len,
|
|
|
|
+ ndisc_addr_option_pad(skb->dev->type));
|
|
|
|
+}
|
|
|
|
+
|
|
static struct nd_opt_hdr *ndisc_next_option(struct nd_opt_hdr *cur,
|
|
static struct nd_opt_hdr *ndisc_next_option(struct nd_opt_hdr *cur,
|
|
struct nd_opt_hdr *end)
|
|
struct nd_opt_hdr *end)
|
|
{
|
|
{
|