diff options
Diffstat (limited to 'net/ipv4/af_inet.c')
-rw-r--r-- | net/ipv4/af_inet.c | 22 |
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 | ||
1528 | static const struct net_protocol icmp_protocol = { | 1537 | static 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; |
1728 | out: | 1744 | out: |
1729 | return rc; | 1745 | return rc; |
1746 | out_unregister_raw_proto: | ||
1747 | proto_unregister(&raw_prot); | ||
1730 | out_unregister_udp_proto: | 1748 | out_unregister_udp_proto: |
1731 | proto_unregister(&udp_prot); | 1749 | proto_unregister(&udp_prot); |
1732 | out_unregister_tcp_proto: | 1750 | out_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; |
1756 | out: | 1776 | out: |
1757 | return rc; | 1777 | return rc; |
1758 | out_misc: | 1778 | out_misc: |
1779 | ping_proc_exit(); | ||
1780 | out_ping: | ||
1759 | udp4_proc_exit(); | 1781 | udp4_proc_exit(); |
1760 | out_udp: | 1782 | out_udp: |
1761 | tcp4_proc_exit(); | 1783 | tcp4_proc_exit(); |