tunneling: Add generic Tunnel segmentation.
Adds generic tunneling offloading support for IPv4-UDP based tunnels. GSO type is added to request this offload for a skb. netdev feature NETIF_F_UDP_TUNNEL is added for hardware offloaded udp-tunnel support. Currently no device supports this feature, software offload is used. This can be used by tunneling protocols like VXLAN. CC: Jesse Gross <jesse@nicira.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
aefbd2b3c2
commit
7313626745
8 changed files with 111 additions and 30 deletions
|
@ -1283,6 +1283,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|||
int ihl;
|
||||
int id;
|
||||
unsigned int offset = 0;
|
||||
bool tunnel;
|
||||
|
||||
if (unlikely(skb_shinfo(skb)->gso_type &
|
||||
~(SKB_GSO_TCPV4 |
|
||||
|
@ -1290,6 +1291,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|||
SKB_GSO_DODGY |
|
||||
SKB_GSO_TCP_ECN |
|
||||
SKB_GSO_GRE |
|
||||
SKB_GSO_UDP_TUNNEL |
|
||||
0)))
|
||||
goto out;
|
||||
|
||||
|
@ -1304,6 +1306,8 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|||
if (unlikely(!pskb_may_pull(skb, ihl)))
|
||||
goto out;
|
||||
|
||||
tunnel = !!skb->encapsulation;
|
||||
|
||||
__skb_pull(skb, ihl);
|
||||
skb_reset_transport_header(skb);
|
||||
iph = ip_hdr(skb);
|
||||
|
@ -1323,7 +1327,7 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
|||
skb = segs;
|
||||
do {
|
||||
iph = ip_hdr(skb);
|
||||
if (proto == IPPROTO_UDP) {
|
||||
if (!tunnel && proto == IPPROTO_UDP) {
|
||||
iph->id = htons(id);
|
||||
iph->frag_off = htons(offset >> 3);
|
||||
if (skb->next != NULL)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue