mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: net/ipv6/xfrm6_output.c net/openvswitch/flow_netlink.c net/openvswitch/vport-gre.c net/openvswitch/vport-vxlan.c net/openvswitch/vport.c net/openvswitch/vport.h The openvswitch conflicts were overlapping changes. One was the egress tunnel info fix in 'net' and the other was the vport ->send() op simplification in 'net-next'. The xfrm6_output.c conflicts was also a simplification overlapping a bug fix. Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
commit
ba3e2084f2
69 changed files with 771 additions and 404 deletions
|
|
@ -498,10 +498,26 @@ static struct sk_buff *gre_handle_offloads(struct sk_buff *skb,
|
|||
csum ? SKB_GSO_GRE_CSUM : SKB_GSO_GRE);
|
||||
}
|
||||
|
||||
static struct rtable *gre_get_rt(struct sk_buff *skb,
|
||||
struct net_device *dev,
|
||||
struct flowi4 *fl,
|
||||
const struct ip_tunnel_key *key)
|
||||
{
|
||||
struct net *net = dev_net(dev);
|
||||
|
||||
memset(fl, 0, sizeof(*fl));
|
||||
fl->daddr = key->u.ipv4.dst;
|
||||
fl->saddr = key->u.ipv4.src;
|
||||
fl->flowi4_tos = RT_TOS(key->tos);
|
||||
fl->flowi4_mark = skb->mark;
|
||||
fl->flowi4_proto = IPPROTO_GRE;
|
||||
|
||||
return ip_route_output_key(net, fl);
|
||||
}
|
||||
|
||||
static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct ip_tunnel_info *tun_info;
|
||||
struct net *net = dev_net(dev);
|
||||
const struct ip_tunnel_key *key;
|
||||
struct flowi4 fl;
|
||||
struct rtable *rt;
|
||||
|
|
@ -516,14 +532,7 @@ static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
goto err_free_skb;
|
||||
|
||||
key = &tun_info->key;
|
||||
memset(&fl, 0, sizeof(fl));
|
||||
fl.daddr = key->u.ipv4.dst;
|
||||
fl.saddr = key->u.ipv4.src;
|
||||
fl.flowi4_tos = RT_TOS(key->tos);
|
||||
fl.flowi4_mark = skb->mark;
|
||||
fl.flowi4_proto = IPPROTO_GRE;
|
||||
|
||||
rt = ip_route_output_key(net, &fl);
|
||||
rt = gre_get_rt(skb, dev, &fl, key);
|
||||
if (IS_ERR(rt))
|
||||
goto err_free_skb;
|
||||
|
||||
|
|
@ -566,6 +575,24 @@ err_free_skb:
|
|||
dev->stats.tx_dropped++;
|
||||
}
|
||||
|
||||
static int gre_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
|
||||
{
|
||||
struct ip_tunnel_info *info = skb_tunnel_info(skb);
|
||||
struct rtable *rt;
|
||||
struct flowi4 fl4;
|
||||
|
||||
if (ip_tunnel_info_af(info) != AF_INET)
|
||||
return -EINVAL;
|
||||
|
||||
rt = gre_get_rt(skb, dev, &fl4, &info->key);
|
||||
if (IS_ERR(rt))
|
||||
return PTR_ERR(rt);
|
||||
|
||||
ip_rt_put(rt);
|
||||
info->key.u.ipv4.src = fl4.saddr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
|
|
@ -1023,6 +1050,7 @@ static const struct net_device_ops gre_tap_netdev_ops = {
|
|||
.ndo_change_mtu = ip_tunnel_change_mtu,
|
||||
.ndo_get_stats64 = ip_tunnel_get_stats64,
|
||||
.ndo_get_iflink = ip_tunnel_get_iflink,
|
||||
.ndo_fill_metadata_dst = gre_fill_metadata_dst,
|
||||
};
|
||||
|
||||
static void ipgre_tap_setup(struct net_device *dev)
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ endif # NF_TABLES
|
|||
|
||||
config NF_DUP_IPV4
|
||||
tristate "Netfilter IPv4 packet duplication to alternate destination"
|
||||
depends on !NF_CONNTRACK || NF_CONNTRACK
|
||||
help
|
||||
This option enables the nf_dup_ipv4 core, which duplicates an IPv4
|
||||
packet to be rerouted to another destination.
|
||||
|
|
|
|||
|
|
@ -60,9 +60,7 @@ static bool rpfilter_lookup_reverse(struct net *net, struct flowi4 *fl4,
|
|||
if (FIB_RES_DEV(res) == dev)
|
||||
dev_match = true;
|
||||
#endif
|
||||
if (dev_match || flags & XT_RPFILTER_LOOSE)
|
||||
return FIB_RES_NH(res).nh_scope <= RT_SCOPE_HOST;
|
||||
return dev_match;
|
||||
return dev_match || flags & XT_RPFILTER_LOOSE;
|
||||
}
|
||||
|
||||
static bool rpfilter_is_local(const struct sk_buff *skb)
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ static void dctcp_update_alpha(struct sock *sk, u32 flags)
|
|||
|
||||
/* alpha = (1 - g) * alpha + g * F */
|
||||
|
||||
alpha -= alpha >> dctcp_shift_g;
|
||||
alpha -= min_not_zero(alpha, alpha >> dctcp_shift_g);
|
||||
if (bytes_ecn) {
|
||||
/* If dctcp_shift_g == 1, a 32bit value would overflow
|
||||
* after 8 Mbytes.
|
||||
|
|
|
|||
|
|
@ -3410,7 +3410,7 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent, int mib)
|
|||
*/
|
||||
tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK);
|
||||
skb_mstamp_get(&skb->skb_mstamp);
|
||||
NET_INC_STATS_BH(sock_net(sk), mib);
|
||||
NET_INC_STATS(sock_net(sk), mib);
|
||||
return tcp_transmit_skb(sk, skb, 0, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ static int xfrm4_tunnel_check_size(struct sk_buff *skb)
|
|||
|
||||
mtu = dst_mtu(skb_dst(skb));
|
||||
if (skb->len > mtu) {
|
||||
skb->protocol = htons(ETH_P_IP);
|
||||
|
||||
if (skb->sk)
|
||||
xfrm_local_error(skb, mtu);
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue