| .. | .. |
|---|
| 437 | 437 | goto err; |
|---|
| 438 | 438 | } |
|---|
| 439 | 439 | skb_dst_set(skb, &rt->dst); |
|---|
| 440 | + |
|---|
| 441 | + memset(IPCB(skb), 0, sizeof(*IPCB(skb))); |
|---|
| 442 | + |
|---|
| 440 | 443 | err = ip_local_out(net, skb->sk, skb); |
|---|
| 441 | 444 | if (unlikely(net_xmit_eval(err))) |
|---|
| 442 | 445 | dev->stats.tx_errors++; |
|---|
| .. | .. |
|---|
| 475 | 478 | goto err; |
|---|
| 476 | 479 | } |
|---|
| 477 | 480 | skb_dst_set(skb, dst); |
|---|
| 481 | + |
|---|
| 482 | + memset(IP6CB(skb), 0, sizeof(*IP6CB(skb))); |
|---|
| 483 | + |
|---|
| 478 | 484 | err = ip6_local_out(net, skb->sk, skb); |
|---|
| 479 | 485 | if (unlikely(net_xmit_eval(err))) |
|---|
| 480 | 486 | dev->stats.tx_errors++; |
|---|
| .. | .. |
|---|
| 580 | 586 | consume_skb(skb); |
|---|
| 581 | 587 | return NET_XMIT_DROP; |
|---|
| 582 | 588 | } |
|---|
| 583 | | - return ipvlan_rcv_frame(addr, &skb, true); |
|---|
| 589 | + ipvlan_rcv_frame(addr, &skb, true); |
|---|
| 590 | + return NET_XMIT_SUCCESS; |
|---|
| 584 | 591 | } |
|---|
| 585 | 592 | } |
|---|
| 586 | 593 | out: |
|---|
| .. | .. |
|---|
| 606 | 613 | consume_skb(skb); |
|---|
| 607 | 614 | return NET_XMIT_DROP; |
|---|
| 608 | 615 | } |
|---|
| 609 | | - return ipvlan_rcv_frame(addr, &skb, true); |
|---|
| 616 | + ipvlan_rcv_frame(addr, &skb, true); |
|---|
| 617 | + return NET_XMIT_SUCCESS; |
|---|
| 610 | 618 | } |
|---|
| 611 | 619 | } |
|---|
| 612 | 620 | skb = skb_share_check(skb, GFP_ATOMIC); |
|---|
| .. | .. |
|---|
| 618 | 626 | * the skb for the main-dev. At the RX side we just return |
|---|
| 619 | 627 | * RX_PASS for it to be processed further on the stack. |
|---|
| 620 | 628 | */ |
|---|
| 621 | | - return dev_forward_skb(ipvlan->phy_dev, skb); |
|---|
| 629 | + dev_forward_skb(ipvlan->phy_dev, skb); |
|---|
| 630 | + return NET_XMIT_SUCCESS; |
|---|
| 622 | 631 | |
|---|
| 623 | 632 | } else if (is_multicast_ether_addr(eth->h_dest)) { |
|---|
| 624 | 633 | skb_reset_mac_header(skb); |
|---|