Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
All conflicts seemed rather trivial, with some guidance from Saeed Mameed on the tc_ct.c one. Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:
@@ -566,7 +566,6 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
|
||||
fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, NULL);
|
||||
security_skb_classify_flow(skb, flowi6_to_flowi(&fl6));
|
||||
|
||||
sk->sk_mark = mark;
|
||||
np = inet6_sk(sk);
|
||||
|
||||
if (!icmpv6_xrlim_allow(sk, type, &fl6))
|
||||
@@ -583,6 +582,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
|
||||
fl6.flowi6_oif = np->ucast_oif;
|
||||
|
||||
ipcm6_init_sk(&ipc6, np);
|
||||
ipc6.sockc.mark = mark;
|
||||
fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
|
||||
|
||||
dst = icmpv6_route_lookup(net, skb, sk, &fl6);
|
||||
@@ -752,7 +752,6 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
|
||||
sk = icmpv6_xmit_lock(net);
|
||||
if (!sk)
|
||||
goto out_bh_enable;
|
||||
sk->sk_mark = mark;
|
||||
np = inet6_sk(sk);
|
||||
|
||||
if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
|
||||
@@ -780,6 +779,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
|
||||
ipcm6_init_sk(&ipc6, np);
|
||||
ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
|
||||
ipc6.tclass = ipv6_get_dsfield(ipv6_hdr(skb));
|
||||
ipc6.sockc.mark = mark;
|
||||
|
||||
if (ip6_append_data(sk, icmpv6_getfrag, &msg,
|
||||
skb->len + sizeof(struct icmp6hdr),
|
||||
|
@@ -1846,6 +1846,7 @@ static const struct net_device_ops ip6_tnl_netdev_ops = {
|
||||
static void ip6_tnl_dev_setup(struct net_device *dev)
|
||||
{
|
||||
dev->netdev_ops = &ip6_tnl_netdev_ops;
|
||||
dev->header_ops = &ip_tunnel_header_ops;
|
||||
dev->needs_free_netdev = true;
|
||||
dev->priv_destructor = ip6_dev_free;
|
||||
|
||||
|
@@ -905,6 +905,7 @@ static const struct net_device_ops vti6_netdev_ops = {
|
||||
static void vti6_dev_setup(struct net_device *dev)
|
||||
{
|
||||
dev->netdev_ops = &vti6_netdev_ops;
|
||||
dev->header_ops = &ip_tunnel_header_ops;
|
||||
dev->needs_free_netdev = true;
|
||||
dev->priv_destructor = vti6_dev_free;
|
||||
|
||||
|
@@ -431,9 +431,12 @@ void fib6_select_path(const struct net *net, struct fib6_result *res,
|
||||
struct fib6_info *sibling, *next_sibling;
|
||||
struct fib6_info *match = res->f6i;
|
||||
|
||||
if ((!match->fib6_nsiblings && !match->nh) || have_oif_match)
|
||||
if (!match->nh && (!match->fib6_nsiblings || have_oif_match))
|
||||
goto out;
|
||||
|
||||
if (match->nh && have_oif_match && res->nh)
|
||||
return;
|
||||
|
||||
/* We might have already computed the hash for ICMPv6 errors. In such
|
||||
* case it will always be non-zero. Otherwise now is the time to do it.
|
||||
*/
|
||||
@@ -3402,7 +3405,7 @@ static bool fib6_is_reject(u32 flags, struct net_device *dev, int addr_type)
|
||||
if ((flags & RTF_REJECT) ||
|
||||
(dev && (dev->flags & IFF_LOOPBACK) &&
|
||||
!(addr_type & IPV6_ADDR_LOOPBACK) &&
|
||||
!(flags & RTF_LOCAL)))
|
||||
!(flags & (RTF_ANYCAST | RTF_LOCAL))))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@@ -1421,6 +1421,7 @@ static void ipip6_tunnel_setup(struct net_device *dev)
|
||||
int t_hlen = tunnel->hlen + sizeof(struct iphdr);
|
||||
|
||||
dev->netdev_ops = &ipip6_netdev_ops;
|
||||
dev->header_ops = &ip_tunnel_header_ops;
|
||||
dev->needs_free_netdev = true;
|
||||
dev->priv_destructor = ipip6_dev_free;
|
||||
|
||||
|
新增問題並參考
封鎖使用者