|
@@ -2496,7 +2496,6 @@ static struct neigh_sysctl_table {
|
|
|
.proc_handler = &proc_dointvec,
|
|
|
},
|
|
|
{
|
|
|
- .ctl_name = NET_NEIGH_RETRANS_TIME,
|
|
|
.procname = "retrans_time",
|
|
|
.maxlen = sizeof(int),
|
|
|
.mode = 0644,
|
|
@@ -2541,26 +2540,39 @@ static struct neigh_sysctl_table {
|
|
|
.proc_handler = &proc_dointvec,
|
|
|
},
|
|
|
{
|
|
|
- .ctl_name = NET_NEIGH_ANYCAST_DELAY,
|
|
|
.procname = "anycast_delay",
|
|
|
.maxlen = sizeof(int),
|
|
|
.mode = 0644,
|
|
|
.proc_handler = &proc_dointvec_userhz_jiffies,
|
|
|
},
|
|
|
{
|
|
|
- .ctl_name = NET_NEIGH_PROXY_DELAY,
|
|
|
.procname = "proxy_delay",
|
|
|
.maxlen = sizeof(int),
|
|
|
.mode = 0644,
|
|
|
.proc_handler = &proc_dointvec_userhz_jiffies,
|
|
|
},
|
|
|
{
|
|
|
- .ctl_name = NET_NEIGH_LOCKTIME,
|
|
|
.procname = "locktime",
|
|
|
.maxlen = sizeof(int),
|
|
|
.mode = 0644,
|
|
|
.proc_handler = &proc_dointvec_userhz_jiffies,
|
|
|
},
|
|
|
+ {
|
|
|
+ .ctl_name = NET_NEIGH_RETRANS_TIME_MS,
|
|
|
+ .procname = "retrans_time_ms",
|
|
|
+ .maxlen = sizeof(int),
|
|
|
+ .mode = 0644,
|
|
|
+ .proc_handler = &proc_dointvec_ms_jiffies,
|
|
|
+ .strategy = &sysctl_ms_jiffies,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .ctl_name = NET_NEIGH_REACHABLE_TIME_MS,
|
|
|
+ .procname = "base_reachable_time_ms",
|
|
|
+ .maxlen = sizeof(int),
|
|
|
+ .mode = 0644,
|
|
|
+ .proc_handler = &proc_dointvec_ms_jiffies,
|
|
|
+ .strategy = &sysctl_ms_jiffies,
|
|
|
+ },
|
|
|
{
|
|
|
.ctl_name = NET_NEIGH_GC_INTERVAL,
|
|
|
.procname = "gc_interval",
|
|
@@ -2590,22 +2602,7 @@ static struct neigh_sysctl_table {
|
|
|
.mode = 0644,
|
|
|
.proc_handler = &proc_dointvec,
|
|
|
},
|
|
|
- {
|
|
|
- .ctl_name = NET_NEIGH_RETRANS_TIME_MS,
|
|
|
- .procname = "retrans_time_ms",
|
|
|
- .maxlen = sizeof(int),
|
|
|
- .mode = 0644,
|
|
|
- .proc_handler = &proc_dointvec_ms_jiffies,
|
|
|
- .strategy = &sysctl_ms_jiffies,
|
|
|
- },
|
|
|
- {
|
|
|
- .ctl_name = NET_NEIGH_REACHABLE_TIME_MS,
|
|
|
- .procname = "base_reachable_time_ms",
|
|
|
- .maxlen = sizeof(int),
|
|
|
- .mode = 0644,
|
|
|
- .proc_handler = &proc_dointvec_ms_jiffies,
|
|
|
- .strategy = &sysctl_ms_jiffies,
|
|
|
- },
|
|
|
+ {}
|
|
|
},
|
|
|
.neigh_dev = {
|
|
|
{
|
|
@@ -2658,42 +2655,48 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
|
|
|
t->neigh_vars[9].data = &p->anycast_delay;
|
|
|
t->neigh_vars[10].data = &p->proxy_delay;
|
|
|
t->neigh_vars[11].data = &p->locktime;
|
|
|
+ t->neigh_vars[12].data = &p->retrans_time;
|
|
|
+ t->neigh_vars[13].data = &p->base_reachable_time;
|
|
|
|
|
|
if (dev) {
|
|
|
dev_name_source = dev->name;
|
|
|
t->neigh_dev[0].ctl_name = dev->ifindex;
|
|
|
- t->neigh_vars[12].procname = NULL;
|
|
|
- t->neigh_vars[13].procname = NULL;
|
|
|
- t->neigh_vars[14].procname = NULL;
|
|
|
- t->neigh_vars[15].procname = NULL;
|
|
|
+ /* Terminate the table early */
|
|
|
+ memset(&t->neigh_vars[14], 0, sizeof(t->neigh_vars[14]));
|
|
|
} else {
|
|
|
dev_name_source = t->neigh_dev[0].procname;
|
|
|
- t->neigh_vars[12].data = (int *)(p + 1);
|
|
|
- t->neigh_vars[13].data = (int *)(p + 1) + 1;
|
|
|
- t->neigh_vars[14].data = (int *)(p + 1) + 2;
|
|
|
- t->neigh_vars[15].data = (int *)(p + 1) + 3;
|
|
|
+ t->neigh_vars[14].data = (int *)(p + 1);
|
|
|
+ t->neigh_vars[15].data = (int *)(p + 1) + 1;
|
|
|
+ t->neigh_vars[16].data = (int *)(p + 1) + 2;
|
|
|
+ t->neigh_vars[17].data = (int *)(p + 1) + 3;
|
|
|
}
|
|
|
|
|
|
- t->neigh_vars[16].data = &p->retrans_time;
|
|
|
- t->neigh_vars[17].data = &p->base_reachable_time;
|
|
|
|
|
|
if (handler || strategy) {
|
|
|
/* RetransTime */
|
|
|
t->neigh_vars[3].proc_handler = handler;
|
|
|
t->neigh_vars[3].strategy = strategy;
|
|
|
t->neigh_vars[3].extra1 = dev;
|
|
|
+ if (!strategy)
|
|
|
+ t->neigh_vars[3].ctl_name = CTL_UNNUMBERED;
|
|
|
/* ReachableTime */
|
|
|
t->neigh_vars[4].proc_handler = handler;
|
|
|
t->neigh_vars[4].strategy = strategy;
|
|
|
t->neigh_vars[4].extra1 = dev;
|
|
|
+ if (!strategy)
|
|
|
+ t->neigh_vars[4].ctl_name = CTL_UNNUMBERED;
|
|
|
/* RetransTime (in milliseconds)*/
|
|
|
- t->neigh_vars[16].proc_handler = handler;
|
|
|
- t->neigh_vars[16].strategy = strategy;
|
|
|
- t->neigh_vars[16].extra1 = dev;
|
|
|
+ t->neigh_vars[12].proc_handler = handler;
|
|
|
+ t->neigh_vars[12].strategy = strategy;
|
|
|
+ t->neigh_vars[12].extra1 = dev;
|
|
|
+ if (!strategy)
|
|
|
+ t->neigh_vars[12].ctl_name = CTL_UNNUMBERED;
|
|
|
/* ReachableTime (in milliseconds) */
|
|
|
- t->neigh_vars[17].proc_handler = handler;
|
|
|
- t->neigh_vars[17].strategy = strategy;
|
|
|
- t->neigh_vars[17].extra1 = dev;
|
|
|
+ t->neigh_vars[13].proc_handler = handler;
|
|
|
+ t->neigh_vars[13].strategy = strategy;
|
|
|
+ t->neigh_vars[13].extra1 = dev;
|
|
|
+ if (!strategy)
|
|
|
+ t->neigh_vars[13].ctl_name = CTL_UNNUMBERED;
|
|
|
}
|
|
|
|
|
|
dev_name = kstrdup(dev_name_source, GFP_KERNEL);
|