aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/af_inet.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/af_inet.c')
-rw-r--r--net/ipv4/af_inet.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 851aa056854b..cc1463156cd0 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -105,6 +105,7 @@
105#include <net/tcp.h> 105#include <net/tcp.h>
106#include <net/udp.h> 106#include <net/udp.h>
107#include <net/udplite.h> 107#include <net/udplite.h>
108#include <net/ping.h>
108#include <linux/skbuff.h> 109#include <linux/skbuff.h>
109#include <net/sock.h> 110#include <net/sock.h>
110#include <net/raw.h> 111#include <net/raw.h>
@@ -1008,6 +1009,14 @@ static struct inet_protosw inetsw_array[] =
1008 .flags = INET_PROTOSW_PERMANENT, 1009 .flags = INET_PROTOSW_PERMANENT,
1009 }, 1010 },
1010 1011
1012 {
1013 .type = SOCK_DGRAM,
1014 .protocol = IPPROTO_ICMP,
1015 .prot = &ping_prot,
1016 .ops = &inet_dgram_ops,
1017 .no_check = UDP_CSUM_DEFAULT,
1018 .flags = INET_PROTOSW_REUSE,
1019 },
1011 1020
1012 { 1021 {
1013 .type = SOCK_RAW, 1022 .type = SOCK_RAW,
@@ -1527,6 +1536,7 @@ static const struct net_protocol udp_protocol = {
1527 1536
1528static const struct net_protocol icmp_protocol = { 1537static const struct net_protocol icmp_protocol = {
1529 .handler = icmp_rcv, 1538 .handler = icmp_rcv,
1539 .err_handler = ping_err,
1530 .no_policy = 1, 1540 .no_policy = 1,
1531 .netns_ok = 1, 1541 .netns_ok = 1,
1532}; 1542};
@@ -1642,6 +1652,10 @@ static int __init inet_init(void)
1642 if (rc) 1652 if (rc)
1643 goto out_unregister_udp_proto; 1653 goto out_unregister_udp_proto;
1644 1654
1655 rc = proto_register(&ping_prot, 1);
1656 if (rc)
1657 goto out_unregister_raw_proto;
1658
1645 /* 1659 /*
1646 * Tell SOCKET that we are alive... 1660 * Tell SOCKET that we are alive...
1647 */ 1661 */
@@ -1697,6 +1711,8 @@ static int __init inet_init(void)
1697 /* Add UDP-Lite (RFC 3828) */ 1711 /* Add UDP-Lite (RFC 3828) */
1698 udplite4_register(); 1712 udplite4_register();
1699 1713
1714 ping_init();
1715
1700 /* 1716 /*
1701 * Set the ICMP layer up 1717 * Set the ICMP layer up
1702 */ 1718 */
@@ -1727,6 +1743,8 @@ static int __init inet_init(void)
1727 rc = 0; 1743 rc = 0;
1728out: 1744out:
1729 return rc; 1745 return rc;
1746out_unregister_raw_proto:
1747 proto_unregister(&raw_prot);
1730out_unregister_udp_proto: 1748out_unregister_udp_proto:
1731 proto_unregister(&udp_prot); 1749 proto_unregister(&udp_prot);
1732out_unregister_tcp_proto: 1750out_unregister_tcp_proto:
@@ -1751,11 +1769,15 @@ static int __init ipv4_proc_init(void)
1751 goto out_tcp; 1769 goto out_tcp;
1752 if (udp4_proc_init()) 1770 if (udp4_proc_init())
1753 goto out_udp; 1771 goto out_udp;
1772 if (ping_proc_init())
1773 goto out_ping;
1754 if (ip_misc_proc_init()) 1774 if (ip_misc_proc_init())
1755 goto out_misc; 1775 goto out_misc;
1756out: 1776out:
1757 return rc; 1777 return rc;
1758out_misc: 1778out_misc:
1779 ping_proc_exit();
1780out_ping:
1759 udp4_proc_exit(); 1781 udp4_proc_exit();
1760out_udp: 1782out_udp:
1761 tcp4_proc_exit(); 1783 tcp4_proc_exit();