diff options
-rw-r--r-- | include/linux/inetdevice.h | 1 | ||||
-rw-r--r-- | include/linux/sysctl.h | 1 | ||||
-rw-r--r-- | net/ipv4/arp.c | 20 | ||||
-rw-r--r-- | net/ipv4/devinet.c | 8 |
4 files changed, 20 insertions, 10 deletions
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index fd7af86151b1..92297ff24e85 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
@@ -25,6 +25,7 @@ struct ipv4_devconf | |||
25 | int arp_filter; | 25 | int arp_filter; |
26 | int arp_announce; | 26 | int arp_announce; |
27 | int arp_ignore; | 27 | int arp_ignore; |
28 | int arp_accept; | ||
28 | int medium_id; | 29 | int medium_id; |
29 | int no_xfrm; | 30 | int no_xfrm; |
30 | int no_policy; | 31 | int no_policy; |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index dfcf449afc7c..8754568a75d7 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -456,6 +456,7 @@ enum | |||
456 | NET_IPV4_CONF_ARP_ANNOUNCE=18, | 456 | NET_IPV4_CONF_ARP_ANNOUNCE=18, |
457 | NET_IPV4_CONF_ARP_IGNORE=19, | 457 | NET_IPV4_CONF_ARP_IGNORE=19, |
458 | NET_IPV4_CONF_PROMOTE_SECONDARIES=20, | 458 | NET_IPV4_CONF_PROMOTE_SECONDARIES=20, |
459 | NET_IPV4_CONF_ARP_ACCEPT=21, | ||
459 | __NET_IPV4_CONF_MAX | 460 | __NET_IPV4_CONF_MAX |
460 | }; | 461 | }; |
461 | 462 | ||
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index accdefedfed7..041dadde31af 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -879,16 +879,16 @@ static int arp_process(struct sk_buff *skb) | |||
879 | 879 | ||
880 | n = __neigh_lookup(&arp_tbl, &sip, dev, 0); | 880 | n = __neigh_lookup(&arp_tbl, &sip, dev, 0); |
881 | 881 | ||
882 | #ifdef CONFIG_IP_ACCEPT_UNSOLICITED_ARP | 882 | if (ipv4_devconf.arp_accept) { |
883 | /* Unsolicited ARP is not accepted by default. | 883 | /* Unsolicited ARP is not accepted by default. |
884 | It is possible, that this option should be enabled for some | 884 | It is possible, that this option should be enabled for some |
885 | devices (strip is candidate) | 885 | devices (strip is candidate) |
886 | */ | 886 | */ |
887 | if (n == NULL && | 887 | if (n == NULL && |
888 | arp->ar_op == htons(ARPOP_REPLY) && | 888 | arp->ar_op == htons(ARPOP_REPLY) && |
889 | inet_addr_type(sip) == RTN_UNICAST) | 889 | inet_addr_type(sip) == RTN_UNICAST) |
890 | n = __neigh_lookup(&arp_tbl, &sip, dev, -1); | 890 | n = __neigh_lookup(&arp_tbl, &sip, dev, -1); |
891 | #endif | 891 | } |
892 | 892 | ||
893 | if (n) { | 893 | if (n) { |
894 | int state = NUD_REACHABLE; | 894 | int state = NUD_REACHABLE; |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 3ffa60dadc0c..44fdf1413e2c 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -1394,6 +1394,14 @@ static struct devinet_sysctl_table { | |||
1394 | .proc_handler = &proc_dointvec, | 1394 | .proc_handler = &proc_dointvec, |
1395 | }, | 1395 | }, |
1396 | { | 1396 | { |
1397 | .ctl_name = NET_IPV4_CONF_ARP_ACCEPT, | ||
1398 | .procname = "arp_accept", | ||
1399 | .data = &ipv4_devconf.arp_accept, | ||
1400 | .maxlen = sizeof(int), | ||
1401 | .mode = 0644, | ||
1402 | .proc_handler = &proc_dointvec, | ||
1403 | }, | ||
1404 | { | ||
1397 | .ctl_name = NET_IPV4_CONF_NOXFRM, | 1405 | .ctl_name = NET_IPV4_CONF_NOXFRM, |
1398 | .procname = "disable_xfrm", | 1406 | .procname = "disable_xfrm", |
1399 | .data = &ipv4_devconf.no_xfrm, | 1407 | .data = &ipv4_devconf.no_xfrm, |