ip_sockglue.c (6b5f43ea08150e7ff72f734545101c58489ead5b) | ip_sockglue.c (8e8cfb114d9f1e2efddb892f993c1ad61635c85e) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * INET An implementation of the TCP/IP protocol suite for the LINUX 4 * operating system. INET is implemented using the BSD Socket 5 * interface as the means of communication with the user level. 6 * 7 * The IP to API glue. 8 * --- 419 unchanged lines hidden (view full) --- 428 serr->ee.ee_pad = 0; 429 serr->ee.ee_info = info; 430 serr->ee.ee_data = 0; 431 serr->addr_offset = (u8 *)&(((struct iphdr *)(icmp_hdr(skb) + 1))->daddr) - 432 skb_network_header(skb); 433 serr->port = port; 434 435 if (skb_pull(skb, payload - skb->data)) { | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * INET An implementation of the TCP/IP protocol suite for the LINUX 4 * operating system. INET is implemented using the BSD Socket 5 * interface as the means of communication with the user level. 6 * 7 * The IP to API glue. 8 * --- 419 unchanged lines hidden (view full) --- 428 serr->ee.ee_pad = 0; 429 serr->ee.ee_info = info; 430 serr->ee.ee_data = 0; 431 serr->addr_offset = (u8 *)&(((struct iphdr *)(icmp_hdr(skb) + 1))->daddr) - 432 skb_network_header(skb); 433 serr->port = port; 434 435 if (skb_pull(skb, payload - skb->data)) { |
436 if (inet_sk(sk)->recverr_rfc4884) | 436 if (inet_test_bit(RECVERR_RFC4884, sk)) |
437 ipv4_icmp_error_rfc4884(skb, &serr->ee.ee_rfc4884); 438 439 skb_reset_transport_header(skb); 440 if (sock_queue_err_skb(sk, skb) == 0) 441 return; 442 } 443 kfree_skb(skb); 444} --- 530 unchanged lines hidden (view full) --- 975 return -EINVAL; 976 inet_assign_bit(RECVFRAGSIZE, sk, val); 977 return 0; 978 case IP_RECVERR: 979 inet_assign_bit(RECVERR, sk, val); 980 if (!val) 981 skb_queue_purge(&sk->sk_error_queue); 982 return 0; | 437 ipv4_icmp_error_rfc4884(skb, &serr->ee.ee_rfc4884); 438 439 skb_reset_transport_header(skb); 440 if (sock_queue_err_skb(sk, skb) == 0) 441 return; 442 } 443 kfree_skb(skb); 444} --- 530 unchanged lines hidden (view full) --- 975 return -EINVAL; 976 inet_assign_bit(RECVFRAGSIZE, sk, val); 977 return 0; 978 case IP_RECVERR: 979 inet_assign_bit(RECVERR, sk, val); 980 if (!val) 981 skb_queue_purge(&sk->sk_error_queue); 982 return 0; |
983 case IP_RECVERR_RFC4884: 984 if (val < 0 || val > 1) 985 return -EINVAL; 986 inet_assign_bit(RECVERR_RFC4884, sk, val); 987 return 0; |
|
983 } 984 985 err = 0; 986 if (needs_rtnl) 987 rtnl_lock(); 988 sockopt_lock_sock(sk); 989 990 switch (optname) { --- 70 unchanged lines hidden (view full) --- 1061 case IP_BIND_ADDRESS_NO_PORT: 1062 inet->bind_address_no_port = val ? 1 : 0; 1063 break; 1064 case IP_MTU_DISCOVER: 1065 if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_OMIT) 1066 goto e_inval; 1067 inet->pmtudisc = val; 1068 break; | 988 } 989 990 err = 0; 991 if (needs_rtnl) 992 rtnl_lock(); 993 sockopt_lock_sock(sk); 994 995 switch (optname) { --- 70 unchanged lines hidden (view full) --- 1066 case IP_BIND_ADDRESS_NO_PORT: 1067 inet->bind_address_no_port = val ? 1 : 0; 1068 break; 1069 case IP_MTU_DISCOVER: 1070 if (val < IP_PMTUDISC_DONT || val > IP_PMTUDISC_OMIT) 1071 goto e_inval; 1072 inet->pmtudisc = val; 1073 break; |
1069 case IP_RECVERR_RFC4884: 1070 if (val < 0 || val > 1) 1071 goto e_inval; 1072 inet->recverr_rfc4884 = !!val; 1073 break; | |
1074 case IP_MULTICAST_TTL: 1075 if (sk->sk_type == SOCK_STREAM) 1076 goto e_inval; 1077 if (optlen < 1) 1078 goto e_inval; 1079 if (val == -1) 1080 val = 1; 1081 if (val < 0 || val > 255) --- 488 unchanged lines hidden (view full) --- 1570 val = inet_test_bit(CHECKSUM, sk); 1571 goto copyval; 1572 case IP_RECVFRAGSIZE: 1573 val = inet_test_bit(RECVFRAGSIZE, sk); 1574 goto copyval; 1575 case IP_RECVERR: 1576 val = inet_test_bit(RECVERR, sk); 1577 goto copyval; | 1074 case IP_MULTICAST_TTL: 1075 if (sk->sk_type == SOCK_STREAM) 1076 goto e_inval; 1077 if (optlen < 1) 1078 goto e_inval; 1079 if (val == -1) 1080 val = 1; 1081 if (val < 0 || val > 255) --- 488 unchanged lines hidden (view full) --- 1570 val = inet_test_bit(CHECKSUM, sk); 1571 goto copyval; 1572 case IP_RECVFRAGSIZE: 1573 val = inet_test_bit(RECVFRAGSIZE, sk); 1574 goto copyval; 1575 case IP_RECVERR: 1576 val = inet_test_bit(RECVERR, sk); 1577 goto copyval; |
1578 case IP_RECVERR_RFC4884: 1579 val = inet_test_bit(RECVERR_RFC4884, sk); 1580 goto copyval; |
|
1578 } 1579 1580 if (needs_rtnl) 1581 rtnl_lock(); 1582 sockopt_lock_sock(sk); 1583 1584 switch (optname) { 1585 case IP_OPTIONS: --- 58 unchanged lines hidden (view full) --- 1644 dst_release(dst); 1645 } 1646 if (!val) { 1647 sockopt_release_sock(sk); 1648 return -ENOTCONN; 1649 } 1650 break; 1651 } | 1581 } 1582 1583 if (needs_rtnl) 1584 rtnl_lock(); 1585 sockopt_lock_sock(sk); 1586 1587 switch (optname) { 1588 case IP_OPTIONS: --- 58 unchanged lines hidden (view full) --- 1647 dst_release(dst); 1648 } 1649 if (!val) { 1650 sockopt_release_sock(sk); 1651 return -ENOTCONN; 1652 } 1653 break; 1654 } |
1652 case IP_RECVERR_RFC4884: 1653 val = inet->recverr_rfc4884; 1654 break; | |
1655 case IP_MULTICAST_TTL: 1656 val = inet->mc_ttl; 1657 break; 1658 case IP_MULTICAST_LOOP: 1659 val = inet->mc_loop; 1660 break; 1661 case IP_UNICAST_IF: 1662 val = (__force int)htonl((__u32) inet->uc_index); --- 152 unchanged lines hidden --- | 1655 case IP_MULTICAST_TTL: 1656 val = inet->mc_ttl; 1657 break; 1658 case IP_MULTICAST_LOOP: 1659 val = inet->mc_loop; 1660 break; 1661 case IP_UNICAST_IF: 1662 val = (__force int)htonl((__u32) inet->uc_index); --- 152 unchanged lines hidden --- |