diff options
| -rw-r--r-- | Documentation/networking/ip-sysctl.txt | 10 | ||||
| -rw-r--r-- | include/linux/neighbour.h | 1 | ||||
| -rw-r--r-- | include/net/neighbour.h | 3 | ||||
| -rw-r--r-- | net/atm/clip.c | 2 | ||||
| -rw-r--r-- | net/core/neighbour.c | 162 | ||||
| -rw-r--r-- | net/decnet/dn_neigh.c | 2 | ||||
| -rw-r--r-- | net/ipv4/arp.c | 2 | ||||
| -rw-r--r-- | net/ipv6/ndisc.c | 2 |
8 files changed, 128 insertions, 56 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index f049a1ca186f..b8867061fce4 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
| @@ -31,6 +31,16 @@ neigh/default/gc_thresh3 - INTEGER | |||
| 31 | when using large numbers of interfaces and when communicating | 31 | when using large numbers of interfaces and when communicating |
| 32 | with large numbers of directly-connected peers. | 32 | with large numbers of directly-connected peers. |
| 33 | 33 | ||
| 34 | neigh/default/unres_qlen_bytes - INTEGER | ||
| 35 | The maximum number of bytes which may be used by packets | ||
| 36 | queued for each unresolved address by other network layers. | ||
| 37 | (added in linux 3.3) | ||
| 38 | |||
| 39 | neigh/default/unres_qlen - INTEGER | ||
| 40 | The maximum number of packets which may be queued for each | ||
| 41 | unresolved address by other network layers. | ||
| 42 | (deprecated in linux 3.3) : use unres_qlen_bytes instead. | ||
| 43 | |||
| 34 | mtu_expires - INTEGER | 44 | mtu_expires - INTEGER |
| 35 | Time, in seconds, that cached PMTU information is kept. | 45 | Time, in seconds, that cached PMTU information is kept. |
| 36 | 46 | ||
diff --git a/include/linux/neighbour.h b/include/linux/neighbour.h index a7003b7a695d..b188f68a08c9 100644 --- a/include/linux/neighbour.h +++ b/include/linux/neighbour.h | |||
| @@ -116,6 +116,7 @@ enum { | |||
| 116 | NDTPA_PROXY_DELAY, /* u64, msecs */ | 116 | NDTPA_PROXY_DELAY, /* u64, msecs */ |
| 117 | NDTPA_PROXY_QLEN, /* u32 */ | 117 | NDTPA_PROXY_QLEN, /* u32 */ |
| 118 | NDTPA_LOCKTIME, /* u64, msecs */ | 118 | NDTPA_LOCKTIME, /* u64, msecs */ |
| 119 | NDTPA_QUEUE_LENBYTES, /* u32 */ | ||
| 119 | __NDTPA_MAX | 120 | __NDTPA_MAX |
| 120 | }; | 121 | }; |
| 121 | #define NDTPA_MAX (__NDTPA_MAX - 1) | 122 | #define NDTPA_MAX (__NDTPA_MAX - 1) |
diff --git a/include/net/neighbour.h b/include/net/neighbour.h index 2720884287c3..7ae5acff96e9 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h | |||
| @@ -59,7 +59,7 @@ struct neigh_parms { | |||
| 59 | int reachable_time; | 59 | int reachable_time; |
| 60 | int delay_probe_time; | 60 | int delay_probe_time; |
| 61 | 61 | ||
| 62 | int queue_len; | 62 | int queue_len_bytes; |
| 63 | int ucast_probes; | 63 | int ucast_probes; |
| 64 | int app_probes; | 64 | int app_probes; |
| 65 | int mcast_probes; | 65 | int mcast_probes; |
| @@ -99,6 +99,7 @@ struct neighbour { | |||
| 99 | rwlock_t lock; | 99 | rwlock_t lock; |
| 100 | atomic_t refcnt; | 100 | atomic_t refcnt; |
| 101 | struct sk_buff_head arp_queue; | 101 | struct sk_buff_head arp_queue; |
| 102 | unsigned int arp_queue_len_bytes; | ||
| 102 | struct timer_list timer; | 103 | struct timer_list timer; |
| 103 | unsigned long used; | 104 | unsigned long used; |
| 104 | atomic_t probes; | 105 | atomic_t probes; |
diff --git a/net/atm/clip.c b/net/atm/clip.c index 852394072fa1..32c41b8a803e 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c | |||
| @@ -329,7 +329,7 @@ static struct neigh_table clip_tbl = { | |||
| 329 | .gc_staletime = 60 * HZ, | 329 | .gc_staletime = 60 * HZ, |
| 330 | .reachable_time = 30 * HZ, | 330 | .reachable_time = 30 * HZ, |
| 331 | .delay_probe_time = 5 * HZ, | 331 | .delay_probe_time = 5 * HZ, |
| 332 | .queue_len = 3, | 332 | .queue_len_bytes = 64 * 1024, |
| 333 | .ucast_probes = 3, | 333 | .ucast_probes = 3, |
| 334 | .mcast_probes = 3, | 334 | .mcast_probes = 3, |
| 335 | .anycast_delay = 1 * HZ, | 335 | .anycast_delay = 1 * HZ, |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 039d51e6c284..2684794458ca 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
| @@ -238,6 +238,7 @@ static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev) | |||
| 238 | it to safe state. | 238 | it to safe state. |
| 239 | */ | 239 | */ |
| 240 | skb_queue_purge(&n->arp_queue); | 240 | skb_queue_purge(&n->arp_queue); |
| 241 | n->arp_queue_len_bytes = 0; | ||
| 241 | n->output = neigh_blackhole; | 242 | n->output = neigh_blackhole; |
| 242 | if (n->nud_state & NUD_VALID) | 243 | if (n->nud_state & NUD_VALID) |
| 243 | n->nud_state = NUD_NOARP; | 244 | n->nud_state = NUD_NOARP; |
| @@ -702,6 +703,7 @@ void neigh_destroy(struct neighbour *neigh) | |||
| 702 | printk(KERN_WARNING "Impossible event.\n"); | 703 | printk(KERN_WARNING "Impossible event.\n"); |
| 703 | 704 | ||
| 704 | skb_queue_purge(&neigh->arp_queue); | 705 | skb_queue_purge(&neigh->arp_queue); |
| 706 | neigh->arp_queue_len_bytes = 0; | ||
| 705 | 707 | ||
| 706 | dev_put(neigh->dev); | 708 | dev_put(neigh->dev); |
| 707 | neigh_parms_put(neigh->parms); | 709 | neigh_parms_put(neigh->parms); |
| @@ -842,6 +844,7 @@ static void neigh_invalidate(struct neighbour *neigh) | |||
| 842 | write_lock(&neigh->lock); | 844 | write_lock(&neigh->lock); |
| 843 | } | 845 | } |
| 844 | skb_queue_purge(&neigh->arp_queue); | 846 | skb_queue_purge(&neigh->arp_queue); |
| 847 | neigh->arp_queue_len_bytes = 0; | ||
| 845 | } | 848 | } |
| 846 | 849 | ||
| 847 | static void neigh_probe(struct neighbour *neigh) | 850 | static void neigh_probe(struct neighbour *neigh) |
| @@ -980,15 +983,20 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb) | |||
| 980 | 983 | ||
| 981 | if (neigh->nud_state == NUD_INCOMPLETE) { | 984 | if (neigh->nud_state == NUD_INCOMPLETE) { |
| 982 | if (skb) { | 985 | if (skb) { |
| 983 | if (skb_queue_len(&neigh->arp_queue) >= | 986 | while (neigh->arp_queue_len_bytes + skb->truesize > |
| 984 | neigh->parms->queue_len) { | 987 | neigh->parms->queue_len_bytes) { |
| 985 | struct sk_buff *buff; | 988 | struct sk_buff *buff; |
| 989 | |||
| 986 | buff = __skb_dequeue(&neigh->arp_queue); | 990 | buff = __skb_dequeue(&neigh->arp_queue); |
| 991 | if (!buff) | ||
| 992 | break; | ||
| 993 | neigh->arp_queue_len_bytes -= buff->truesize; | ||
| 987 | kfree_skb(buff); | 994 | kfree_skb(buff); |
| 988 | NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards); | 995 | NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards); |
| 989 | } | 996 | } |
| 990 | skb_dst_force(skb); | 997 | skb_dst_force(skb); |
| 991 | __skb_queue_tail(&neigh->arp_queue, skb); | 998 | __skb_queue_tail(&neigh->arp_queue, skb); |
| 999 | neigh->arp_queue_len_bytes += skb->truesize; | ||
| 992 | } | 1000 | } |
| 993 | rc = 1; | 1001 | rc = 1; |
| 994 | } | 1002 | } |
| @@ -1175,6 +1183,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new, | |||
| 1175 | write_lock_bh(&neigh->lock); | 1183 | write_lock_bh(&neigh->lock); |
| 1176 | } | 1184 | } |
| 1177 | skb_queue_purge(&neigh->arp_queue); | 1185 | skb_queue_purge(&neigh->arp_queue); |
| 1186 | neigh->arp_queue_len_bytes = 0; | ||
| 1178 | } | 1187 | } |
| 1179 | out: | 1188 | out: |
| 1180 | if (update_isrouter) { | 1189 | if (update_isrouter) { |
| @@ -1747,7 +1756,11 @@ static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms) | |||
| 1747 | NLA_PUT_U32(skb, NDTPA_IFINDEX, parms->dev->ifindex); | 1756 | NLA_PUT_U32(skb, NDTPA_IFINDEX, parms->dev->ifindex); |
| 1748 | 1757 | ||
| 1749 | NLA_PUT_U32(skb, NDTPA_REFCNT, atomic_read(&parms->refcnt)); | 1758 | NLA_PUT_U32(skb, NDTPA_REFCNT, atomic_read(&parms->refcnt)); |
| 1750 | NLA_PUT_U32(skb, NDTPA_QUEUE_LEN, parms->queue_len); | 1759 | NLA_PUT_U32(skb, NDTPA_QUEUE_LENBYTES, parms->queue_len_bytes); |
| 1760 | /* approximative value for deprecated QUEUE_LEN (in packets) */ | ||
| 1761 | NLA_PUT_U32(skb, NDTPA_QUEUE_LEN, | ||
| 1762 | DIV_ROUND_UP(parms->queue_len_bytes, | ||
| 1763 | SKB_TRUESIZE(ETH_FRAME_LEN))); | ||
| 1751 | NLA_PUT_U32(skb, NDTPA_PROXY_QLEN, parms->proxy_qlen); | 1764 | NLA_PUT_U32(skb, NDTPA_PROXY_QLEN, parms->proxy_qlen); |
| 1752 | NLA_PUT_U32(skb, NDTPA_APP_PROBES, parms->app_probes); | 1765 | NLA_PUT_U32(skb, NDTPA_APP_PROBES, parms->app_probes); |
| 1753 | NLA_PUT_U32(skb, NDTPA_UCAST_PROBES, parms->ucast_probes); | 1766 | NLA_PUT_U32(skb, NDTPA_UCAST_PROBES, parms->ucast_probes); |
| @@ -1974,7 +1987,11 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
| 1974 | 1987 | ||
| 1975 | switch (i) { | 1988 | switch (i) { |
| 1976 | case NDTPA_QUEUE_LEN: | 1989 | case NDTPA_QUEUE_LEN: |
| 1977 | p->queue_len = nla_get_u32(tbp[i]); | 1990 | p->queue_len_bytes = nla_get_u32(tbp[i]) * |
| 1991 | SKB_TRUESIZE(ETH_FRAME_LEN); | ||
| 1992 | break; | ||
| 1993 | case NDTPA_QUEUE_LENBYTES: | ||
| 1994 | p->queue_len_bytes = nla_get_u32(tbp[i]); | ||
| 1978 | break; | 1995 | break; |
| 1979 | case NDTPA_PROXY_QLEN: | 1996 | case NDTPA_PROXY_QLEN: |
| 1980 | p->proxy_qlen = nla_get_u32(tbp[i]); | 1997 | p->proxy_qlen = nla_get_u32(tbp[i]); |
| @@ -2635,117 +2652,158 @@ EXPORT_SYMBOL(neigh_app_ns); | |||
| 2635 | 2652 | ||
| 2636 | #ifdef CONFIG_SYSCTL | 2653 | #ifdef CONFIG_SYSCTL |
| 2637 | 2654 | ||
| 2638 | #define NEIGH_VARS_MAX 19 | 2655 | static int proc_unres_qlen(ctl_table *ctl, int write, void __user *buffer, |
| 2656 | size_t *lenp, loff_t *ppos) | ||
| 2657 | { | ||
| 2658 | int size, ret; | ||
| 2659 | ctl_table tmp = *ctl; | ||
| 2660 | |||
| 2661 | tmp.data = &size; | ||
| 2662 | size = DIV_ROUND_UP(*(int *)ctl->data, SKB_TRUESIZE(ETH_FRAME_LEN)); | ||
| 2663 | ret = proc_dointvec(&tmp, write, buffer, lenp, ppos); | ||
| 2664 | if (write && !ret) | ||
| 2665 | *(int *)ctl->data = size * SKB_TRUESIZE(ETH_FRAME_LEN); | ||
| 2666 | return ret; | ||
| 2667 | } | ||
| 2668 | |||
| 2669 | enum { | ||
| 2670 | NEIGH_VAR_MCAST_PROBE, | ||
| 2671 | NEIGH_VAR_UCAST_PROBE, | ||
| 2672 | NEIGH_VAR_APP_PROBE, | ||
| 2673 | NEIGH_VAR_RETRANS_TIME, | ||
| 2674 | NEIGH_VAR_BASE_REACHABLE_TIME, | ||
| 2675 | NEIGH_VAR_DELAY_PROBE_TIME, | ||
| 2676 | NEIGH_VAR_GC_STALETIME, | ||
| 2677 | NEIGH_VAR_QUEUE_LEN, | ||
| 2678 | NEIGH_VAR_QUEUE_LEN_BYTES, | ||
| 2679 | NEIGH_VAR_PROXY_QLEN, | ||
| 2680 | NEIGH_VAR_ANYCAST_DELAY, | ||
| 2681 | NEIGH_VAR_PROXY_DELAY, | ||
| 2682 | NEIGH_VAR_LOCKTIME, | ||
| 2683 | NEIGH_VAR_RETRANS_TIME_MS, | ||
| 2684 | NEIGH_VAR_BASE_REACHABLE_TIME_MS, | ||
| 2685 | NEIGH_VAR_GC_INTERVAL, | ||
| 2686 | NEIGH_VAR_GC_THRESH1, | ||
| 2687 | NEIGH_VAR_GC_THRESH2, | ||
| 2688 | NEIGH_VAR_GC_THRESH3, | ||
| 2689 | NEIGH_VAR_MAX | ||
| 2690 | }; | ||
| 2639 | 2691 | ||
| 2640 | static struct neigh_sysctl_table { | 2692 | static struct neigh_sysctl_table { |
| 2641 | struct ctl_table_header *sysctl_header; | 2693 | struct ctl_table_header *sysctl_header; |
| 2642 | struct ctl_table neigh_vars[NEIGH_VARS_MAX]; | 2694 | struct ctl_table neigh_vars[NEIGH_VAR_MAX + 1]; |
| 2643 | char *dev_name; | 2695 | char *dev_name; |
| 2644 | } neigh_sysctl_template __read_mostly = { | 2696 | } neigh_sysctl_template __read_mostly = { |
| 2645 | .neigh_vars = { | 2697 | .neigh_vars = { |
| 2646 | { | 2698 | [NEIGH_VAR_MCAST_PROBE] = { |
| 2647 | .procname = "mcast_solicit", | 2699 | .procname = "mcast_solicit", |
| 2648 | .maxlen = sizeof(int), | 2700 | .maxlen = sizeof(int), |
| 2649 | .mode = 0644, | 2701 | .mode = 0644, |
| 2650 | .proc_handler = proc_dointvec, | 2702 | .proc_handler = proc_dointvec, |
| 2651 | }, | 2703 | }, |
| 2652 | { | 2704 | [NEIGH_VAR_UCAST_PROBE] = { |
| 2653 | .procname = "ucast_solicit", | 2705 | .procname = "ucast_solicit", |
| 2654 | .maxlen = sizeof(int), | 2706 | .maxlen = sizeof(int), |
| 2655 | .mode = 0644, | 2707 | .mode = 0644, |
| 2656 | .proc_handler = proc_dointvec, | 2708 | .proc_handler = proc_dointvec, |
| 2657 | }, | 2709 | }, |
| 2658 | { | 2710 | [NEIGH_VAR_APP_PROBE] = { |
| 2659 | .procname = "app_solicit", | 2711 | .procname = "app_solicit", |
| 2660 | .maxlen = sizeof(int), | 2712 | .maxlen = sizeof(int), |
| 2661 | .mode = 0644, | 2713 | .mode = 0644, |
| 2662 | .proc_handler = proc_dointvec, | 2714 | .proc_handler = proc_dointvec, |
| 2663 | }, | 2715 | }, |
| 2664 | { | 2716 | [NEIGH_VAR_RETRANS_TIME] = { |
| 2665 | .procname = "retrans_time", | 2717 | .procname = "retrans_time", |
| 2666 | .maxlen = sizeof(int), | 2718 | .maxlen = sizeof(int), |
| 2667 | .mode = 0644, | 2719 | .mode = 0644, |
| 2668 | .proc_handler = proc_dointvec_userhz_jiffies, | 2720 | .proc_handler = proc_dointvec_userhz_jiffies, |
| 2669 | }, | 2721 | }, |
| 2670 | { | 2722 | [NEIGH_VAR_BASE_REACHABLE_TIME] = { |
| 2671 | .procname = "base_reachable_time", | 2723 | .procname = "base_reachable_time", |
| 2672 | .maxlen = sizeof(int), | 2724 | .maxlen = sizeof(int), |
| 2673 | .mode = 0644, | 2725 | .mode = 0644, |
| 2674 | .proc_handler = proc_dointvec_jiffies, | 2726 | .proc_handler = proc_dointvec_jiffies, |
| 2675 | }, | 2727 | }, |
| 2676 | { | 2728 | [NEIGH_VAR_DELAY_PROBE_TIME] = { |
| 2677 | .procname = "delay_first_probe_time", | 2729 | .procname = "delay_first_probe_time", |
| 2678 | .maxlen = sizeof(int), | 2730 | .maxlen = sizeof(int), |
| 2679 | .mode = 0644, | 2731 | .mode = 0644, |
| 2680 | .proc_handler = proc_dointvec_jiffies, | 2732 | .proc_handler = proc_dointvec_jiffies, |
| 2681 | }, | 2733 | }, |
| 2682 | { | 2734 | [NEIGH_VAR_GC_STALETIME] = { |
| 2683 | .procname = "gc_stale_time", | 2735 | .procname = "gc_stale_time", |
| 2684 | .maxlen = sizeof(int), | 2736 | .maxlen = sizeof(int), |
| 2685 | .mode = 0644, | 2737 | .mode = 0644, |
| 2686 | .proc_handler = proc_dointvec_jiffies, | 2738 | .proc_handler = proc_dointvec_jiffies, |
| 2687 | }, | 2739 | }, |
| 2688 | { | 2740 | [NEIGH_VAR_QUEUE_LEN] = { |
| 2689 | .procname = "unres_qlen", | 2741 | .procname = "unres_qlen", |
| 2690 | .maxlen = sizeof(int), | 2742 | .maxlen = sizeof(int), |
| 2691 | .mode = 0644, | 2743 | .mode = 0644, |
| 2744 | .proc_handler = proc_unres_qlen, | ||
| 2745 | }, | ||
| 2746 | [NEIGH_VAR_QUEUE_LEN_BYTES] = { | ||
| 2747 | .procname = "unres_qlen_bytes", | ||
| 2748 | .maxlen = sizeof(int), | ||
| 2749 | .mode = 0644, | ||
| 2692 | .proc_handler = proc_dointvec, | 2750 | .proc_handler = proc_dointvec, |
| 2693 | }, | 2751 | }, |
| 2694 | { | 2752 | [NEIGH_VAR_PROXY_QLEN] = { |
| 2695 | .procname = "proxy_qlen", | 2753 | .procname = "proxy_qlen", |
| 2696 | .maxlen = sizeof(int), | 2754 | .maxlen = sizeof(int), |
| 2697 | .mode = 0644, | 2755 | .mode = 0644, |
| 2698 | .proc_handler = proc_dointvec, | 2756 | .proc_handler = proc_dointvec, |
| 2699 | }, | 2757 | }, |
| 2700 | { | 2758 | [NEIGH_VAR_ANYCAST_DELAY] = { |
| 2701 | .procname = "anycast_delay", | 2759 | .procname = "anycast_delay", |
| 2702 | .maxlen = sizeof(int), | 2760 | .maxlen = sizeof(int), |
| 2703 | .mode = 0644, | 2761 | .mode = 0644, |
| 2704 | .proc_handler = proc_dointvec_userhz_jiffies, | 2762 | .proc_handler = proc_dointvec_userhz_jiffies, |
| 2705 | }, | 2763 | }, |
| 2706 | { | 2764 | [NEIGH_VAR_PROXY_DELAY] = { |
| 2707 | .procname = "proxy_delay", | 2765 | .procname = "proxy_delay", |
| 2708 | .maxlen = sizeof(int), | 2766 | .maxlen = sizeof(int), |
| 2709 | .mode = 0644, | 2767 | .mode = 0644, |
| 2710 | .proc_handler = proc_dointvec_userhz_jiffies, | 2768 | .proc_handler = proc_dointvec_userhz_jiffies, |
| 2711 | }, | 2769 | }, |
| 2712 | { | 2770 | [NEIGH_VAR_LOCKTIME] = { |
| 2713 | .procname = "locktime", | 2771 | .procname = "locktime", |
| 2714 | .maxlen = sizeof(int), | 2772 | .maxlen = sizeof(int), |
| 2715 | .mode = 0644, | 2773 | .mode = 0644, |
| 2716 | .proc_handler = proc_dointvec_userhz_jiffies, | 2774 | .proc_handler = proc_dointvec_userhz_jiffies, |
| 2717 | }, | 2775 | }, |
| 2718 | { | 2776 | [NEIGH_VAR_RETRANS_TIME_MS] = { |
| 2719 | .procname = "retrans_time_ms", | 2777 | .procname = "retrans_time_ms", |
| 2720 | .maxlen = sizeof(int), | 2778 | .maxlen = sizeof(int), |
| 2721 | .mode = 0644, | 2779 | .mode = 0644, |
| 2722 | .proc_handler = proc_dointvec_ms_jiffies, | 2780 | .proc_handler = proc_dointvec_ms_jiffies, |
| 2723 | }, | 2781 | }, |
| 2724 | { | 2782 | [NEIGH_VAR_BASE_REACHABLE_TIME_MS] = { |
| 2725 | .procname = "base_reachable_time_ms", | 2783 | .procname = "base_reachable_time_ms", |
| 2726 | .maxlen = sizeof(int), | 2784 | .maxlen = sizeof(int), |
| 2727 | .mode = 0644, | 2785 | .mode = 0644, |
| 2728 | .proc_handler = proc_dointvec_ms_jiffies, | 2786 | .proc_handler = proc_dointvec_ms_jiffies, |
| 2729 | }, | 2787 | }, |
| 2730 | { | 2788 | [NEIGH_VAR_GC_INTERVAL] = { |
| 2731 | .procname = "gc_interval", | 2789 | .procname = "gc_interval", |
| 2732 | .maxlen = sizeof(int), | 2790 | .maxlen = sizeof(int), |
| 2733 | .mode = 0644, | 2791 | .mode = 0644, |
| 2734 | .proc_handler = proc_dointvec_jiffies, | 2792 | .proc_handler = proc_dointvec_jiffies, |
| 2735 | }, | 2793 | }, |
| 2736 | { | 2794 | [NEIGH_VAR_GC_THRESH1] = { |
| 2737 | .procname = "gc_thresh1", | 2795 | .procname = "gc_thresh1", |
| 2738 | .maxlen = sizeof(int), | 2796 | .maxlen = sizeof(int), |
| 2739 | .mode = 0644, | 2797 | .mode = 0644, |
| 2740 | .proc_handler = proc_dointvec, | 2798 | .proc_handler = proc_dointvec, |
| 2741 | }, | 2799 | }, |
| 2742 | { | 2800 | [NEIGH_VAR_GC_THRESH2] = { |
| 2743 | .procname = "gc_thresh2", | 2801 | .procname = "gc_thresh2", |
| 2744 | .maxlen = sizeof(int), | 2802 | .maxlen = sizeof(int), |
| 2745 | .mode = 0644, | 2803 | .mode = 0644, |
| 2746 | .proc_handler = proc_dointvec, | 2804 | .proc_handler = proc_dointvec, |
| 2747 | }, | 2805 | }, |
| 2748 | { | 2806 | [NEIGH_VAR_GC_THRESH3] = { |
| 2749 | .procname = "gc_thresh3", | 2807 | .procname = "gc_thresh3", |
| 2750 | .maxlen = sizeof(int), | 2808 | .maxlen = sizeof(int), |
| 2751 | .mode = 0644, | 2809 | .mode = 0644, |
| @@ -2778,47 +2836,49 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p, | |||
| 2778 | if (!t) | 2836 | if (!t) |
| 2779 | goto err; | 2837 | goto err; |
| 2780 | 2838 | ||
| 2781 | t->neigh_vars[0].data = &p->mcast_probes; | 2839 | t->neigh_vars[NEIGH_VAR_MCAST_PROBE].data = &p->mcast_probes; |
| 2782 | t->neigh_vars[1].data = &p->ucast_probes; | 2840 | t->neigh_vars[NEIGH_VAR_UCAST_PROBE].data = &p->ucast_probes; |
| 2783 | t->neigh_vars[2].data = &p->app_probes; | 2841 | t->neigh_vars[NEIGH_VAR_APP_PROBE].data = &p->app_probes; |
| 2784 | t->neigh_vars[3].data = &p->retrans_time; | 2842 | t->neigh_vars[NEIGH_VAR_RETRANS_TIME].data = &p->retrans_time; |
| 2785 | t->neigh_vars[4].data = &p->base_reachable_time; | 2843 | t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].data = &p->base_reachable_time; |
| 2786 | t->neigh_vars[5].data = &p->delay_probe_time; | 2844 | t->neigh_vars[NEIGH_VAR_DELAY_PROBE_TIME].data = &p->delay_probe_time; |
| 2787 | t->neigh_vars[6].data = &p->gc_staletime; | 2845 | t->neigh_vars[NEIGH_VAR_GC_STALETIME].data = &p->gc_staletime; |
| 2788 | t->neigh_vars[7].data = &p->queue_len; | 2846 | t->neigh_vars[NEIGH_VAR_QUEUE_LEN].data = &p->queue_len_bytes; |
| 2789 | t->neigh_vars[8].data = &p->proxy_qlen; | 2847 | t->neigh_vars[NEIGH_VAR_QUEUE_LEN_BYTES].data = &p->queue_len_bytes; |
| 2790 | t->neigh_vars[9].data = &p->anycast_delay; | 2848 | t->neigh_vars[NEIGH_VAR_PROXY_QLEN].data = &p->proxy_qlen; |
| 2791 | t->neigh_vars[10].data = &p->proxy_delay; | 2849 | t->neigh_vars[NEIGH_VAR_ANYCAST_DELAY].data = &p->anycast_delay; |
| 2792 | t->neigh_vars[11].data = &p->locktime; | 2850 | t->neigh_vars[NEIGH_VAR_PROXY_DELAY].data = &p->proxy_delay; |
| 2793 | t->neigh_vars[12].data = &p->retrans_time; | 2851 | t->neigh_vars[NEIGH_VAR_LOCKTIME].data = &p->locktime; |
| 2794 | t->neigh_vars[13].data = &p->base_reachable_time; | 2852 | t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].data = &p->retrans_time; |
| 2853 | t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].data = &p->base_reachable_time; | ||
| 2795 | 2854 | ||
| 2796 | if (dev) { | 2855 | if (dev) { |
| 2797 | dev_name_source = dev->name; | 2856 | dev_name_source = dev->name; |
| 2798 | /* Terminate the table early */ | 2857 | /* Terminate the table early */ |
| 2799 | memset(&t->neigh_vars[14], 0, sizeof(t->neigh_vars[14])); | 2858 | memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0, |
| 2859 | sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL])); | ||
| 2800 | } else { | 2860 | } else { |
| 2801 | dev_name_source = neigh_path[NEIGH_CTL_PATH_DEV].procname; | 2861 | dev_name_source = neigh_path[NEIGH_CTL_PATH_DEV].procname; |
| 2802 | t->neigh_vars[14].data = (int *)(p + 1); | 2862 | t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = (int *)(p + 1); |
| 2803 | t->neigh_vars[15].data = (int *)(p + 1) + 1; | 2863 | t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = (int *)(p + 1) + 1; |
| 2804 | t->neigh_vars[16].data = (int *)(p + 1) + 2; | 2864 | t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = (int *)(p + 1) + 2; |
| 2805 | t->neigh_vars[17].data = (int *)(p + 1) + 3; | 2865 | t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = (int *)(p + 1) + 3; |
| 2806 | } | 2866 | } |
| 2807 | 2867 | ||
| 2808 | 2868 | ||
| 2809 | if (handler) { | 2869 | if (handler) { |
| 2810 | /* RetransTime */ | 2870 | /* RetransTime */ |
| 2811 | t->neigh_vars[3].proc_handler = handler; | 2871 | t->neigh_vars[NEIGH_VAR_RETRANS_TIME].proc_handler = handler; |
| 2812 | t->neigh_vars[3].extra1 = dev; | 2872 | t->neigh_vars[NEIGH_VAR_RETRANS_TIME].extra1 = dev; |
| 2813 | /* ReachableTime */ | 2873 | /* ReachableTime */ |
| 2814 | t->neigh_vars[4].proc_handler = handler; | 2874 | t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler = handler; |
| 2815 | t->neigh_vars[4].extra1 = dev; | 2875 | t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].extra1 = dev; |
| 2816 | /* RetransTime (in milliseconds)*/ | 2876 | /* RetransTime (in milliseconds)*/ |
| 2817 | t->neigh_vars[12].proc_handler = handler; | 2877 | t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].proc_handler = handler; |
| 2818 | t->neigh_vars[12].extra1 = dev; | 2878 | t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].extra1 = dev; |
| 2819 | /* ReachableTime (in milliseconds) */ | 2879 | /* ReachableTime (in milliseconds) */ |
| 2820 | t->neigh_vars[13].proc_handler = handler; | 2880 | t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler = handler; |
| 2821 | t->neigh_vars[13].extra1 = dev; | 2881 | t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].extra1 = dev; |
| 2822 | } | 2882 | } |
| 2823 | 2883 | ||
| 2824 | t->dev_name = kstrdup(dev_name_source, GFP_KERNEL); | 2884 | t->dev_name = kstrdup(dev_name_source, GFP_KERNEL); |
diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c index 7f0eb087dc11..3532ac64c82d 100644 --- a/net/decnet/dn_neigh.c +++ b/net/decnet/dn_neigh.c | |||
| @@ -107,7 +107,7 @@ struct neigh_table dn_neigh_table = { | |||
| 107 | .gc_staletime = 60 * HZ, | 107 | .gc_staletime = 60 * HZ, |
| 108 | .reachable_time = 30 * HZ, | 108 | .reachable_time = 30 * HZ, |
| 109 | .delay_probe_time = 5 * HZ, | 109 | .delay_probe_time = 5 * HZ, |
| 110 | .queue_len = 3, | 110 | .queue_len_bytes = 64*1024, |
| 111 | .ucast_probes = 0, | 111 | .ucast_probes = 0, |
| 112 | .app_probes = 0, | 112 | .app_probes = 0, |
| 113 | .mcast_probes = 0, | 113 | .mcast_probes = 0, |
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 96a164aa1367..d732827b32b9 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
| @@ -177,7 +177,7 @@ struct neigh_table arp_tbl = { | |||
| 177 | .gc_staletime = 60 * HZ, | 177 | .gc_staletime = 60 * HZ, |
| 178 | .reachable_time = 30 * HZ, | 178 | .reachable_time = 30 * HZ, |
| 179 | .delay_probe_time = 5 * HZ, | 179 | .delay_probe_time = 5 * HZ, |
| 180 | .queue_len = 3, | 180 | .queue_len_bytes = 64*1024, |
| 181 | .ucast_probes = 3, | 181 | .ucast_probes = 3, |
| 182 | .mcast_probes = 3, | 182 | .mcast_probes = 3, |
| 183 | .anycast_delay = 1 * HZ, | 183 | .anycast_delay = 1 * HZ, |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 44e5b7f2a6c1..4a2098222625 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
| @@ -141,7 +141,7 @@ struct neigh_table nd_tbl = { | |||
| 141 | .gc_staletime = 60 * HZ, | 141 | .gc_staletime = 60 * HZ, |
| 142 | .reachable_time = ND_REACHABLE_TIME, | 142 | .reachable_time = ND_REACHABLE_TIME, |
| 143 | .delay_probe_time = 5 * HZ, | 143 | .delay_probe_time = 5 * HZ, |
| 144 | .queue_len = 3, | 144 | .queue_len_bytes = 64*1024, |
| 145 | .ucast_probes = 3, | 145 | .ucast_probes = 3, |
| 146 | .mcast_probes = 3, | 146 | .mcast_probes = 3, |
| 147 | .anycast_delay = 1 * HZ, | 147 | .anycast_delay = 1 * HZ, |
