mirror of
https://github.com/breeze303/openwrt-ipq.git
synced 2025-12-17 02:41:06 +00:00
qualcommax: NSS: refresh patches for 6.6.51
Signed-off-by: Sean Khan <datapronix@protonmail.com>
This commit is contained in:
parent
6ecb328fa3
commit
0c6c7025e7
@ -94,7 +94,7 @@
|
|||||||
|
|
||||||
--- a/include/net/ip6_route.h
|
--- a/include/net/ip6_route.h
|
||||||
+++ b/include/net/ip6_route.h
|
+++ b/include/net/ip6_route.h
|
||||||
@@ -207,6 +207,11 @@ void rt6_multipath_rebalance(struct fib6
|
@@ -215,6 +215,11 @@ void rt6_multipath_rebalance(struct fib6
|
||||||
void rt6_uncached_list_add(struct rt6_info *rt);
|
void rt6_uncached_list_add(struct rt6_info *rt);
|
||||||
void rt6_uncached_list_del(struct rt6_info *rt);
|
void rt6_uncached_list_del(struct rt6_info *rt);
|
||||||
|
|
||||||
@ -610,7 +610,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_remove_new_fa:
|
out_remove_new_fa:
|
||||||
@@ -1775,6 +1781,9 @@ int fib_table_delete(struct net *net, st
|
@@ -1776,6 +1782,9 @@ int fib_table_delete(struct net *net, st
|
||||||
if (fa_to_delete->fa_state & FA_S_ACCESSED)
|
if (fa_to_delete->fa_state & FA_S_ACCESSED)
|
||||||
rt_cache_flush(cfg->fc_nlinfo.nl_net);
|
rt_cache_flush(cfg->fc_nlinfo.nl_net);
|
||||||
|
|
||||||
@ -620,7 +620,7 @@
|
|||||||
fib_release_info(fa_to_delete->fa_info);
|
fib_release_info(fa_to_delete->fa_info);
|
||||||
alias_free_mem_rcu(fa_to_delete);
|
alias_free_mem_rcu(fa_to_delete);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2407,6 +2416,20 @@ void __init fib_trie_init(void)
|
@@ -2408,6 +2417,20 @@ void __init fib_trie_init(void)
|
||||||
0, SLAB_PANIC | SLAB_ACCOUNT, NULL);
|
0, SLAB_PANIC | SLAB_ACCOUNT, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,7 +643,7 @@
|
|||||||
struct fib_table *tb;
|
struct fib_table *tb;
|
||||||
--- a/net/ipv6/ndisc.c
|
--- a/net/ipv6/ndisc.c
|
||||||
+++ b/net/ipv6/ndisc.c
|
+++ b/net/ipv6/ndisc.c
|
||||||
@@ -666,6 +666,7 @@ void ndisc_send_ns(struct net_device *de
|
@@ -668,6 +668,7 @@ void ndisc_send_ns(struct net_device *de
|
||||||
if (skb)
|
if (skb)
|
||||||
ndisc_send_skb(skb, daddr, saddr);
|
ndisc_send_skb(skb, daddr, saddr);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
static const struct flow_dissector_key flow_keys_bonding_keys[] = {
|
static const struct flow_dissector_key flow_keys_bonding_keys[] = {
|
||||||
{
|
{
|
||||||
@@ -5872,6 +5873,11 @@ static void bond_destructor(struct net_d
|
@@ -5911,6 +5912,11 @@ static void bond_destructor(struct net_d
|
||||||
if (bond->wq)
|
if (bond->wq)
|
||||||
destroy_workqueue(bond->wq);
|
destroy_workqueue(bond->wq);
|
||||||
|
|
||||||
@ -20,7 +20,7 @@
|
|||||||
free_percpu(bond->rr_tx_counter);
|
free_percpu(bond->rr_tx_counter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6421,6 +6427,13 @@ int bond_create(struct net *net, const c
|
@@ -6464,6 +6470,13 @@ int bond_create(struct net *net, const c
|
||||||
|
|
||||||
bond_work_init_all(bond);
|
bond_work_init_all(bond);
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
--- a/include/net/bonding.h
|
--- a/include/net/bonding.h
|
||||||
+++ b/include/net/bonding.h
|
+++ b/include/net/bonding.h
|
||||||
@@ -261,6 +261,7 @@ struct bonding {
|
@@ -261,6 +261,7 @@ struct bonding {
|
||||||
spinlock_t ipsec_lock;
|
struct mutex ipsec_lock;
|
||||||
#endif /* CONFIG_XFRM_OFFLOAD */
|
#endif /* CONFIG_XFRM_OFFLOAD */
|
||||||
struct bpf_prog *xdp_prog;
|
struct bpf_prog *xdp_prog;
|
||||||
+ u32 id;/* QCA NSS ECM bonding support */
|
+ u32 id;/* QCA NSS ECM bonding support */
|
||||||
|
|||||||
@ -227,7 +227,7 @@
|
|||||||
/**
|
/**
|
||||||
* bond_dev_queue_xmit - Prepare skb for xmit.
|
* bond_dev_queue_xmit - Prepare skb for xmit.
|
||||||
*
|
*
|
||||||
@@ -1189,6 +1204,23 @@ void bond_change_active_slave(struct bon
|
@@ -1228,6 +1243,23 @@ void bond_change_active_slave(struct bon
|
||||||
if (BOND_MODE(bond) == BOND_MODE_8023AD)
|
if (BOND_MODE(bond) == BOND_MODE_8023AD)
|
||||||
bond_3ad_handle_link_change(new_active, BOND_LINK_UP);
|
bond_3ad_handle_link_change(new_active, BOND_LINK_UP);
|
||||||
|
|
||||||
@ -251,7 +251,7 @@
|
|||||||
if (bond_is_lb(bond))
|
if (bond_is_lb(bond))
|
||||||
bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
|
bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
|
||||||
} else {
|
} else {
|
||||||
@@ -1833,6 +1865,7 @@ int bond_enslave(struct net_device *bond
|
@@ -1872,6 +1904,7 @@ int bond_enslave(struct net_device *bond
|
||||||
const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
|
const struct net_device_ops *slave_ops = slave_dev->netdev_ops;
|
||||||
struct slave *new_slave = NULL, *prev_slave;
|
struct slave *new_slave = NULL, *prev_slave;
|
||||||
struct sockaddr_storage ss;
|
struct sockaddr_storage ss;
|
||||||
@ -259,7 +259,7 @@
|
|||||||
int link_reporting;
|
int link_reporting;
|
||||||
int res = 0, i;
|
int res = 0, i;
|
||||||
|
|
||||||
@@ -2278,6 +2311,15 @@ int bond_enslave(struct net_device *bond
|
@@ -2317,6 +2350,15 @@ int bond_enslave(struct net_device *bond
|
||||||
bond_is_active_slave(new_slave) ? "an active" : "a backup",
|
bond_is_active_slave(new_slave) ? "an active" : "a backup",
|
||||||
new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
|
new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
|
||||||
|
|
||||||
@ -275,7 +275,7 @@
|
|||||||
/* enslave is successful */
|
/* enslave is successful */
|
||||||
bond_queue_slave_event(new_slave);
|
bond_queue_slave_event(new_slave);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2343,6 +2385,15 @@ err_undo_flags:
|
@@ -2382,6 +2424,15 @@ err_undo_flags:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +291,7 @@
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2364,6 +2415,7 @@ static int __bond_release_one(struct net
|
@@ -2403,6 +2454,7 @@ static int __bond_release_one(struct net
|
||||||
struct bonding *bond = netdev_priv(bond_dev);
|
struct bonding *bond = netdev_priv(bond_dev);
|
||||||
struct slave *slave, *oldcurrent;
|
struct slave *slave, *oldcurrent;
|
||||||
struct sockaddr_storage ss;
|
struct sockaddr_storage ss;
|
||||||
@ -299,7 +299,7 @@
|
|||||||
int old_flags = bond_dev->flags;
|
int old_flags = bond_dev->flags;
|
||||||
netdev_features_t old_features = bond_dev->features;
|
netdev_features_t old_features = bond_dev->features;
|
||||||
|
|
||||||
@@ -2386,6 +2438,15 @@ static int __bond_release_one(struct net
|
@@ -2425,6 +2477,15 @@ static int __bond_release_one(struct net
|
||||||
|
|
||||||
bond_set_slave_inactive_flags(slave, BOND_SLAVE_NOTIFY_NOW);
|
bond_set_slave_inactive_flags(slave, BOND_SLAVE_NOTIFY_NOW);
|
||||||
|
|
||||||
@ -315,7 +315,7 @@
|
|||||||
bond_sysfs_slave_del(slave);
|
bond_sysfs_slave_del(slave);
|
||||||
|
|
||||||
/* recompute stats just before removing the slave */
|
/* recompute stats just before removing the slave */
|
||||||
@@ -2708,6 +2769,8 @@ static void bond_miimon_commit(struct bo
|
@@ -2747,6 +2808,8 @@ static void bond_miimon_commit(struct bo
|
||||||
struct slave *slave, *primary, *active;
|
struct slave *slave, *primary, *active;
|
||||||
bool do_failover = false;
|
bool do_failover = false;
|
||||||
struct list_head *iter;
|
struct list_head *iter;
|
||||||
@ -324,7 +324,7 @@
|
|||||||
|
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
|
|
||||||
@@ -2747,6 +2810,12 @@ static void bond_miimon_commit(struct bo
|
@@ -2786,6 +2849,12 @@ static void bond_miimon_commit(struct bo
|
||||||
bond_set_active_slave(slave);
|
bond_set_active_slave(slave);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,7 +337,7 @@
|
|||||||
slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n",
|
slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n",
|
||||||
slave->speed == SPEED_UNKNOWN ? 0 : slave->speed,
|
slave->speed == SPEED_UNKNOWN ? 0 : slave->speed,
|
||||||
slave->duplex ? "full" : "half");
|
slave->duplex ? "full" : "half");
|
||||||
@@ -2795,6 +2864,16 @@ static void bond_miimon_commit(struct bo
|
@@ -2834,6 +2903,16 @@ static void bond_miimon_commit(struct bo
|
||||||
unblock_netpoll_tx();
|
unblock_netpoll_tx();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,7 +354,7 @@
|
|||||||
bond_set_carrier(bond);
|
bond_set_carrier(bond);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4047,8 +4126,219 @@ static inline u32 bond_eth_hash(struct s
|
@@ -4086,8 +4165,219 @@ static inline u32 bond_eth_hash(struct s
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ep = (struct ethhdr *)(data + mhoff);
|
ep = (struct ethhdr *)(data + mhoff);
|
||||||
@ -575,7 +575,7 @@
|
|||||||
|
|
||||||
static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, const void *data,
|
static bool bond_flow_ip(struct sk_buff *skb, struct flow_keys *fk, const void *data,
|
||||||
int hlen, __be16 l2_proto, int *nhoff, int *ip_proto, bool l34)
|
int hlen, __be16 l2_proto, int *nhoff, int *ip_proto, bool l34)
|
||||||
@@ -5177,15 +5467,18 @@ static netdev_tx_t bond_3ad_xor_xmit(str
|
@@ -5216,15 +5506,18 @@ static netdev_tx_t bond_3ad_xor_xmit(str
|
||||||
struct net_device *dev)
|
struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct bonding *bond = netdev_priv(dev);
|
struct bonding *bond = netdev_priv(dev);
|
||||||
@ -601,7 +601,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* in broadcast mode, we send everything to all usable interfaces. */
|
/* in broadcast mode, we send everything to all usable interfaces. */
|
||||||
@@ -5435,8 +5728,9 @@ static netdev_tx_t __bond_start_xmit(str
|
@@ -5474,8 +5767,9 @@ static netdev_tx_t __bond_start_xmit(str
|
||||||
return bond_xmit_roundrobin(skb, dev);
|
return bond_xmit_roundrobin(skb, dev);
|
||||||
case BOND_MODE_ACTIVEBACKUP:
|
case BOND_MODE_ACTIVEBACKUP:
|
||||||
return bond_xmit_activebackup(skb, dev);
|
return bond_xmit_activebackup(skb, dev);
|
||||||
|
|||||||
@ -370,7 +370,7 @@
|
|||||||
subsys_initcall(pktsched_init);
|
subsys_initcall(pktsched_init);
|
||||||
--- a/net/sched/sch_generic.c
|
--- a/net/sched/sch_generic.c
|
||||||
+++ b/net/sched/sch_generic.c
|
+++ b/net/sched/sch_generic.c
|
||||||
@@ -1073,6 +1073,7 @@ static void __qdisc_destroy(struct Qdisc
|
@@ -1074,6 +1074,7 @@ static void __qdisc_destroy(struct Qdisc
|
||||||
|
|
||||||
call_rcu(&qdisc->rcu, qdisc_free_cb);
|
call_rcu(&qdisc->rcu, qdisc_free_cb);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
--- a/net/l2tp/l2tp_core.c
|
--- a/net/l2tp/l2tp_core.c
|
||||||
+++ b/net/l2tp/l2tp_core.c
|
+++ b/net/l2tp/l2tp_core.c
|
||||||
@@ -398,6 +398,31 @@ err_tlock:
|
@@ -403,6 +403,31 @@ err_tlock:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(l2tp_session_register);
|
EXPORT_SYMBOL_GPL(l2tp_session_register);
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
#endif /* __NET_IP_TUNNELS_H */
|
#endif /* __NET_IP_TUNNELS_H */
|
||||||
--- a/net/ipv6/ip6_tunnel.c
|
--- a/net/ipv6/ip6_tunnel.c
|
||||||
+++ b/net/ipv6/ip6_tunnel.c
|
+++ b/net/ipv6/ip6_tunnel.c
|
||||||
@@ -2412,6 +2412,26 @@ nla_put_failure:
|
@@ -2414,6 +2414,26 @@ nla_put_failure:
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
--- a/net/ipv6/ip6_tunnel.c
|
--- a/net/ipv6/ip6_tunnel.c
|
||||||
+++ b/net/ipv6/ip6_tunnel.c
|
+++ b/net/ipv6/ip6_tunnel.c
|
||||||
@@ -2418,7 +2418,7 @@ nla_put_failure:
|
@@ -2420,7 +2420,7 @@ nla_put_failure:
|
||||||
*/
|
*/
|
||||||
void ip6_update_offload_stats(struct net_device *dev, void *ptr)
|
void ip6_update_offload_stats(struct net_device *dev, void *ptr)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <net/ip.h>
|
#include <net/ip.h>
|
||||||
@@ -658,6 +659,7 @@ static int esp_output(struct xfrm_state
|
@@ -657,6 +658,7 @@ static int esp_output(struct xfrm_state
|
||||||
struct ip_esp_hdr *esph;
|
struct ip_esp_hdr *esph;
|
||||||
struct crypto_aead *aead;
|
struct crypto_aead *aead;
|
||||||
struct esp_info esp;
|
struct esp_info esp;
|
||||||
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
esp.inplace = true;
|
esp.inplace = true;
|
||||||
|
|
||||||
@@ -669,6 +671,11 @@ static int esp_output(struct xfrm_state
|
@@ -668,6 +670,11 @@ static int esp_output(struct xfrm_state
|
||||||
aead = x->data;
|
aead = x->data;
|
||||||
alen = crypto_aead_authsize(aead);
|
alen = crypto_aead_authsize(aead);
|
||||||
|
|
||||||
@ -53,7 +53,7 @@
|
|||||||
esp.tfclen = 0;
|
esp.tfclen = 0;
|
||||||
if (x->tfcpad) {
|
if (x->tfcpad) {
|
||||||
struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb);
|
struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb);
|
||||||
@@ -890,6 +897,7 @@ static int esp_input(struct xfrm_state *
|
@@ -889,6 +896,7 @@ static int esp_input(struct xfrm_state *
|
||||||
u8 *iv;
|
u8 *iv;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
int err = -EINVAL;
|
int err = -EINVAL;
|
||||||
@ -61,7 +61,7 @@
|
|||||||
|
|
||||||
if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen))
|
if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen))
|
||||||
goto out;
|
goto out;
|
||||||
@@ -897,6 +905,12 @@ static int esp_input(struct xfrm_state *
|
@@ -896,6 +904,12 @@ static int esp_input(struct xfrm_state *
|
||||||
if (elen <= 0)
|
if (elen <= 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -84,7 +84,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <net/ip.h>
|
#include <net/ip.h>
|
||||||
@@ -696,6 +697,7 @@ static int esp6_output(struct xfrm_state
|
@@ -695,6 +696,7 @@ static int esp6_output(struct xfrm_state
|
||||||
struct ip_esp_hdr *esph;
|
struct ip_esp_hdr *esph;
|
||||||
struct crypto_aead *aead;
|
struct crypto_aead *aead;
|
||||||
struct esp_info esp;
|
struct esp_info esp;
|
||||||
@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
esp.inplace = true;
|
esp.inplace = true;
|
||||||
|
|
||||||
@@ -707,6 +709,11 @@ static int esp6_output(struct xfrm_state
|
@@ -706,6 +708,11 @@ static int esp6_output(struct xfrm_state
|
||||||
aead = x->data;
|
aead = x->data;
|
||||||
alen = crypto_aead_authsize(aead);
|
alen = crypto_aead_authsize(aead);
|
||||||
|
|
||||||
@ -104,7 +104,7 @@
|
|||||||
esp.tfclen = 0;
|
esp.tfclen = 0;
|
||||||
if (x->tfcpad) {
|
if (x->tfcpad) {
|
||||||
struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb);
|
struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb);
|
||||||
@@ -934,6 +941,7 @@ static int esp6_input(struct xfrm_state
|
@@ -933,6 +940,7 @@ static int esp6_input(struct xfrm_state
|
||||||
__be32 *seqhi;
|
__be32 *seqhi;
|
||||||
u8 *iv;
|
u8 *iv;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen)) {
|
if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen)) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
@@ -945,6 +953,12 @@ static int esp6_input(struct xfrm_state
|
@@ -944,6 +952,12 @@ static int esp6_input(struct xfrm_state
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -388,7 +388,7 @@
|
|||||||
|
|
||||||
data = kmalloc_reserve(&size, gfp_mask, NUMA_NO_NODE, NULL);
|
data = kmalloc_reserve(&size, gfp_mask, NUMA_NO_NODE, NULL);
|
||||||
if (!data)
|
if (!data)
|
||||||
@@ -4865,6 +4971,14 @@ static void skb_extensions_init(void) {}
|
@@ -4869,6 +4975,14 @@ static void skb_extensions_init(void) {}
|
||||||
|
|
||||||
void __init skb_init(void)
|
void __init skb_init(void)
|
||||||
{
|
{
|
||||||
@ -403,7 +403,7 @@
|
|||||||
skbuff_cache = kmem_cache_create_usercopy("skbuff_head_cache",
|
skbuff_cache = kmem_cache_create_usercopy("skbuff_head_cache",
|
||||||
sizeof(struct sk_buff),
|
sizeof(struct sk_buff),
|
||||||
0,
|
0,
|
||||||
@@ -4890,6 +5004,7 @@ void __init skb_init(void)
|
@@ -4894,6 +5008,7 @@ void __init skb_init(void)
|
||||||
SKB_SMALL_HEAD_HEADROOM,
|
SKB_SMALL_HEAD_HEADROOM,
|
||||||
NULL);
|
NULL);
|
||||||
skb_extensions_init();
|
skb_extensions_init();
|
||||||
@ -411,7 +411,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -6393,6 +6508,8 @@ static int pskb_carve_inside_header(stru
|
@@ -6397,6 +6512,8 @@ static int pskb_carve_inside_header(stru
|
||||||
if (skb_pfmemalloc(skb))
|
if (skb_pfmemalloc(skb))
|
||||||
gfp_mask |= __GFP_MEMALLOC;
|
gfp_mask |= __GFP_MEMALLOC;
|
||||||
|
|
||||||
@ -420,7 +420,7 @@
|
|||||||
data = kmalloc_reserve(&size, gfp_mask, NUMA_NO_NODE, NULL);
|
data = kmalloc_reserve(&size, gfp_mask, NUMA_NO_NODE, NULL);
|
||||||
if (!data)
|
if (!data)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -6509,6 +6626,8 @@ static int pskb_carve_inside_nonlinear(s
|
@@ -6513,6 +6630,8 @@ static int pskb_carve_inside_nonlinear(s
|
||||||
if (skb_pfmemalloc(skb))
|
if (skb_pfmemalloc(skb))
|
||||||
gfp_mask |= __GFP_MEMALLOC;
|
gfp_mask |= __GFP_MEMALLOC;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user