.. | .. |
---|
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); |
---|