diff options
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 09bd89c90a71..0bb0d8877954 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -4891,7 +4891,7 @@ EXPORT_SYMBOL_GPL(skb_scrub_packet); | |||
4891 | * | 4891 | * |
4892 | * The MAC/L2 or network (IP, IPv6) headers are not accounted for. | 4892 | * The MAC/L2 or network (IP, IPv6) headers are not accounted for. |
4893 | */ | 4893 | */ |
4894 | unsigned int skb_gso_transport_seglen(const struct sk_buff *skb) | 4894 | static unsigned int skb_gso_transport_seglen(const struct sk_buff *skb) |
4895 | { | 4895 | { |
4896 | const struct skb_shared_info *shinfo = skb_shinfo(skb); | 4896 | const struct skb_shared_info *shinfo = skb_shinfo(skb); |
4897 | unsigned int thlen = 0; | 4897 | unsigned int thlen = 0; |
@@ -4913,7 +4913,40 @@ unsigned int skb_gso_transport_seglen(const struct sk_buff *skb) | |||
4913 | */ | 4913 | */ |
4914 | return thlen + shinfo->gso_size; | 4914 | return thlen + shinfo->gso_size; |
4915 | } | 4915 | } |
4916 | EXPORT_SYMBOL_GPL(skb_gso_transport_seglen); | 4916 | |
4917 | /** | ||
4918 | * skb_gso_network_seglen - Return length of individual segments of a gso packet | ||
4919 | * | ||
4920 | * @skb: GSO skb | ||
4921 | * | ||
4922 | * skb_gso_network_seglen is used to determine the real size of the | ||
4923 | * individual segments, including Layer3 (IP, IPv6) and L4 headers (TCP/UDP). | ||
4924 | * | ||
4925 | * The MAC/L2 header is not accounted for. | ||
4926 | */ | ||
4927 | static unsigned int skb_gso_network_seglen(const struct sk_buff *skb) | ||
4928 | { | ||
4929 | unsigned int hdr_len = skb_transport_header(skb) - | ||
4930 | skb_network_header(skb); | ||
4931 | |||
4932 | return hdr_len + skb_gso_transport_seglen(skb); | ||
4933 | } | ||
4934 | |||
4935 | /** | ||
4936 | * skb_gso_mac_seglen - Return length of individual segments of a gso packet | ||
4937 | * | ||
4938 | * @skb: GSO skb | ||
4939 | * | ||
4940 | * skb_gso_mac_seglen is used to determine the real size of the | ||
4941 | * individual segments, including MAC/L2, Layer3 (IP, IPv6) and L4 | ||
4942 | * headers (TCP/UDP). | ||
4943 | */ | ||
4944 | static unsigned int skb_gso_mac_seglen(const struct sk_buff *skb) | ||
4945 | { | ||
4946 | unsigned int hdr_len = skb_transport_header(skb) - skb_mac_header(skb); | ||
4947 | |||
4948 | return hdr_len + skb_gso_transport_seglen(skb); | ||
4949 | } | ||
4917 | 4950 | ||
4918 | /** | 4951 | /** |
4919 | * skb_gso_size_check - check the skb size, considering GSO_BY_FRAGS | 4952 | * skb_gso_size_check - check the skb size, considering GSO_BY_FRAGS |
@@ -4955,19 +4988,20 @@ static inline bool skb_gso_size_check(const struct sk_buff *skb, | |||
4955 | } | 4988 | } |
4956 | 4989 | ||
4957 | /** | 4990 | /** |
4958 | * skb_gso_validate_mtu - Return in case such skb fits a given MTU | 4991 | * skb_gso_validate_network_len - Will a split GSO skb fit into a given MTU? |
4959 | * | 4992 | * |
4960 | * @skb: GSO skb | 4993 | * @skb: GSO skb |
4961 | * @mtu: MTU to validate against | 4994 | * @mtu: MTU to validate against |
4962 | * | 4995 | * |
4963 | * skb_gso_validate_mtu validates if a given skb will fit a wanted MTU | 4996 | * skb_gso_validate_network_len validates if a given skb will fit a |
4964 | * once split. | 4997 | * wanted MTU once split. It considers L3 headers, L4 headers, and the |
4998 | * payload. | ||
4965 | */ | 4999 | */ |
4966 | bool skb_gso_validate_mtu(const struct sk_buff *skb, unsigned int mtu) | 5000 | bool skb_gso_validate_network_len(const struct sk_buff *skb, unsigned int mtu) |
4967 | { | 5001 | { |
4968 | return skb_gso_size_check(skb, skb_gso_network_seglen(skb), mtu); | 5002 | return skb_gso_size_check(skb, skb_gso_network_seglen(skb), mtu); |
4969 | } | 5003 | } |
4970 | EXPORT_SYMBOL_GPL(skb_gso_validate_mtu); | 5004 | EXPORT_SYMBOL_GPL(skb_gso_validate_network_len); |
4971 | 5005 | ||
4972 | /** | 5006 | /** |
4973 | * skb_gso_validate_mac_len - Will a split GSO skb fit in a given length? | 5007 | * skb_gso_validate_mac_len - Will a split GSO skb fit in a given length? |