Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
6c36810a
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6c36810a
编写于
8月 27, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'no-iwlwifi' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
上级
df694712
576fdeae
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
80 addition
and
81 deletion
+80
-81
drivers/net/wireless/ath5k/base.c
drivers/net/wireless/ath5k/base.c
+17
-6
drivers/net/wireless/ath5k/base.h
drivers/net/wireless/ath5k/base.h
+1
-0
drivers/net/wireless/atmel.c
drivers/net/wireless/atmel.c
+31
-20
net/mac80211/debugfs_netdev.c
net/mac80211/debugfs_netdev.c
+12
-12
net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
+6
-0
net/mac80211/mesh.c
net/mac80211/mesh.c
+1
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+11
-41
net/rfkill/rfkill.c
net/rfkill/rfkill.c
+1
-1
未找到文件。
drivers/net/wireless/ath5k/base.c
浏览文件 @
6c36810a
...
...
@@ -251,7 +251,7 @@ static inline void ath5k_txbuf_free(struct ath5k_softc *sc,
return
;
pci_unmap_single
(
sc
->
pdev
,
bf
->
skbaddr
,
bf
->
skb
->
len
,
PCI_DMA_TODEVICE
);
dev_kfree_skb
(
bf
->
skb
);
dev_kfree_skb
_any
(
bf
->
skb
);
bf
->
skb
=
NULL
;
}
...
...
@@ -466,6 +466,7 @@ ath5k_pci_probe(struct pci_dev *pdev,
mutex_init
(
&
sc
->
lock
);
spin_lock_init
(
&
sc
->
rxbuflock
);
spin_lock_init
(
&
sc
->
txbuflock
);
spin_lock_init
(
&
sc
->
block
);
/* Set private data */
pci_set_drvdata
(
pdev
,
hw
);
...
...
@@ -2179,8 +2180,11 @@ ath5k_beacon_config(struct ath5k_softc *sc)
sc
->
imask
|=
AR5K_INT_SWBA
;
if
(
ath5k_hw_hasveol
(
ah
))
if
(
ath5k_hw_hasveol
(
ah
))
{
spin_lock
(
&
sc
->
block
);
ath5k_beacon_send
(
sc
);
spin_unlock
(
&
sc
->
block
);
}
}
/* TODO else AP */
...
...
@@ -2403,7 +2407,9 @@ ath5k_intr(int irq, void *dev_id)
TSF_TO_TU
(
tsf
),
(
unsigned
long
long
)
tsf
);
}
else
{
spin_lock
(
&
sc
->
block
);
ath5k_beacon_send
(
sc
);
spin_unlock
(
&
sc
->
block
);
}
}
if
(
status
&
AR5K_INT_RXEOL
)
{
...
...
@@ -2745,6 +2751,11 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
ret
=
-
EOPNOTSUPP
;
goto
end
;
}
/* Set to a reasonable value. Note that this will
* be set to mac80211's value at ath5k_config(). */
sc
->
bintval
=
1000
;
ret
=
0
;
end:
mutex_unlock
(
&
sc
->
lock
);
...
...
@@ -2789,9 +2800,6 @@ ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct
ath5k_hw
*
ah
=
sc
->
ah
;
int
ret
;
/* Set to a reasonable value. Note that this will
* be set to mac80211's value at ath5k_config(). */
sc
->
bintval
=
1000
;
mutex_lock
(
&
sc
->
lock
);
if
(
sc
->
vif
!=
vif
)
{
ret
=
-
EIO
;
...
...
@@ -3050,6 +3058,7 @@ static int
ath5k_beacon_update
(
struct
ieee80211_hw
*
hw
,
struct
sk_buff
*
skb
)
{
struct
ath5k_softc
*
sc
=
hw
->
priv
;
unsigned
long
flags
;
int
ret
;
ath5k_debug_dump_skb
(
sc
,
skb
,
"BC "
,
1
);
...
...
@@ -3059,12 +3068,14 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
goto
end
;
}
spin_lock_irqsave
(
&
sc
->
block
,
flags
);
ath5k_txbuf_free
(
sc
,
sc
->
bbuf
);
sc
->
bbuf
->
skb
=
skb
;
ret
=
ath5k_beacon_setup
(
sc
,
sc
->
bbuf
);
if
(
ret
)
sc
->
bbuf
->
skb
=
NULL
;
else
{
spin_unlock_irqrestore
(
&
sc
->
block
,
flags
);
if
(
!
ret
)
{
ath5k_beacon_config
(
sc
);
mmiowb
();
}
...
...
drivers/net/wireless/ath5k/base.h
浏览文件 @
6c36810a
...
...
@@ -172,6 +172,7 @@ struct ath5k_softc {
struct
tasklet_struct
txtq
;
/* tx intr tasklet */
struct
ath5k_led
tx_led
;
/* tx led */
spinlock_t
block
;
/* protects beacon */
struct
ath5k_buf
*
bbuf
;
/* beacon buffer */
unsigned
int
bhalq
,
/* SW q for outgoing beacons */
bmisscount
,
/* missed beacon transmits */
...
...
drivers/net/wireless/atmel.c
浏览文件 @
6c36810a
...
...
@@ -1304,7 +1304,7 @@ EXPORT_SYMBOL(atmel_open);
int
atmel_open
(
struct
net_device
*
dev
)
{
struct
atmel_private
*
priv
=
netdev_priv
(
dev
);
int
i
,
channel
;
int
i
,
channel
,
err
;
/* any scheduled timer is no longer needed and might screw things up.. */
del_timer_sync
(
&
priv
->
management_timer
);
...
...
@@ -1328,8 +1328,9 @@ int atmel_open(struct net_device *dev)
priv
->
site_survey_state
=
SITE_SURVEY_IDLE
;
priv
->
station_is_associated
=
0
;
if
(
!
reset_atmel_card
(
dev
))
return
-
EAGAIN
;
err
=
reset_atmel_card
(
dev
);
if
(
err
)
return
err
;
if
(
priv
->
config_reg_domain
)
{
priv
->
reg_domain
=
priv
->
config_reg_domain
;
...
...
@@ -3061,12 +3062,20 @@ static void authenticate(struct atmel_private *priv, u16 frame_len)
}
if
(
status
==
WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG
)
{
/* Do opensystem first, then try sharedkey */
/* Flip back and forth between WEP auth modes until the max
* authentication tries has been exceeded.
*/
if
(
system
==
WLAN_AUTH_OPEN
)
{
priv
->
CurrentAuthentTransactionSeqNum
=
0x001
;
priv
->
exclude_unencrypted
=
1
;
send_authentication_request
(
priv
,
WLAN_AUTH_SHARED_KEY
,
NULL
,
0
);
return
;
}
else
if
(
system
==
WLAN_AUTH_SHARED_KEY
&&
priv
->
wep_is_on
)
{
priv
->
CurrentAuthentTransactionSeqNum
=
0x001
;
priv
->
exclude_unencrypted
=
0
;
send_authentication_request
(
priv
,
WLAN_AUTH_OPEN
,
NULL
,
0
);
return
;
}
else
if
(
priv
->
connect_to_any_BSS
)
{
int
bss_index
;
...
...
@@ -3580,12 +3589,12 @@ static int atmel_wakeup_firmware(struct atmel_private *priv)
if
(
i
==
0
)
{
printk
(
KERN_ALERT
"%s: MAC failed to boot.
\n
"
,
priv
->
dev
->
name
);
return
0
;
return
-
EIO
;
}
if
((
priv
->
host_info_base
=
atmel_read16
(
priv
->
dev
,
MR2
))
==
0xffff
)
{
printk
(
KERN_ALERT
"%s: card missing.
\n
"
,
priv
->
dev
->
name
);
return
0
;
return
-
ENODEV
;
}
/* now check for completion of MAC initialization through
...
...
@@ -3609,19 +3618,19 @@ static int atmel_wakeup_firmware(struct atmel_private *priv)
if
(
i
==
0
)
{
printk
(
KERN_ALERT
"%s: MAC failed to initialise.
\n
"
,
priv
->
dev
->
name
);
return
0
;
return
-
EIO
;
}
/* Check for MAC_INIT_OK only on the register that the MAC_INIT_OK was set */
if
((
mr3
&
MAC_INIT_COMPLETE
)
&&
!
(
atmel_read16
(
priv
->
dev
,
MR3
)
&
MAC_INIT_OK
))
{
printk
(
KERN_ALERT
"%s: MAC failed MR3 self-test.
\n
"
,
priv
->
dev
->
name
);
return
0
;
return
-
EIO
;
}
if
((
mr1
&
MAC_INIT_COMPLETE
)
&&
!
(
atmel_read16
(
priv
->
dev
,
MR1
)
&
MAC_INIT_OK
))
{
printk
(
KERN_ALERT
"%s: MAC failed MR1 self-test.
\n
"
,
priv
->
dev
->
name
);
return
0
;
return
-
EIO
;
}
atmel_copy_to_host
(
priv
->
dev
,
(
unsigned
char
*
)
iface
,
...
...
@@ -3642,7 +3651,7 @@ static int atmel_wakeup_firmware(struct atmel_private *priv)
iface
->
func_ctrl
=
le16_to_cpu
(
iface
->
func_ctrl
);
iface
->
mac_status
=
le16_to_cpu
(
iface
->
mac_status
);
return
1
;
return
0
;
}
/* determine type of memory and MAC address */
...
...
@@ -3693,7 +3702,7 @@ static int probe_atmel_card(struct net_device *dev)
/* Standard firmware in flash, boot it up and ask
for the Mac Address */
priv
->
card_type
=
CARD_TYPE_SPI_FLASH
;
if
(
atmel_wakeup_firmware
(
priv
))
{
if
(
atmel_wakeup_firmware
(
priv
)
==
0
)
{
atmel_get_mib
(
priv
,
Mac_Address_Mib_Type
,
0
,
dev
->
dev_addr
,
6
);
/* got address, now squash it again until the network
...
...
@@ -3835,6 +3844,7 @@ static int reset_atmel_card(struct net_device *dev)
struct
atmel_private
*
priv
=
netdev_priv
(
dev
);
u8
configuration
;
int
old_state
=
priv
->
station_state
;
int
err
=
0
;
/* data to add to the firmware names, in priority order
this implemenents firmware versioning */
...
...
@@ -3868,11 +3878,12 @@ static int reset_atmel_card(struct net_device *dev)
dev
->
name
);
strcpy
(
priv
->
firmware_id
,
"atmel_at76c502.bin"
);
}
if
(
request_firmware
(
&
fw_entry
,
priv
->
firmware_id
,
priv
->
sys_dev
)
!=
0
)
{
err
=
request_firmware
(
&
fw_entry
,
priv
->
firmware_id
,
priv
->
sys_dev
);
if
(
err
!=
0
)
{
printk
(
KERN_ALERT
"%s: firmware %s is missing, cannot continue.
\n
"
,
dev
->
name
,
priv
->
firmware_id
);
return
0
;
return
err
;
}
}
else
{
int
fw_index
=
0
;
...
...
@@ -3901,7 +3912,7 @@ static int reset_atmel_card(struct net_device *dev)
"%s: firmware %s is missing, cannot start.
\n
"
,
dev
->
name
,
priv
->
firmware_id
);
priv
->
firmware_id
[
0
]
=
'\0'
;
return
0
;
return
-
ENOENT
;
}
}
...
...
@@ -3926,8 +3937,9 @@ static int reset_atmel_card(struct net_device *dev)
release_firmware
(
fw_entry
);
}
if
(
!
atmel_wakeup_firmware
(
priv
))
return
0
;
err
=
atmel_wakeup_firmware
(
priv
);
if
(
err
!=
0
)
return
err
;
/* Check the version and set the correct flag for wpa stuff,
old and new firmware is incompatible.
...
...
@@ -3968,10 +3980,9 @@ static int reset_atmel_card(struct net_device *dev)
if
(
!
priv
->
radio_on_broken
)
{
if
(
atmel_send_command_wait
(
priv
,
CMD_EnableRadio
,
NULL
,
0
)
==
CMD_STATUS_REJECTED_RADIO_OFF
)
{
printk
(
KERN_INFO
"%s: cannot turn the radio on. (Hey radio, you're beautiful!)
\n
"
,
printk
(
KERN_INFO
"%s: cannot turn the radio on.
\n
"
,
dev
->
name
);
return
0
;
return
-
EIO
;
}
}
...
...
@@ -4006,7 +4017,7 @@ static int reset_atmel_card(struct net_device *dev)
wireless_send_event
(
priv
->
dev
,
SIOCGIWAP
,
&
wrqu
,
NULL
);
}
return
1
;
return
0
;
}
static
void
atmel_send_command
(
struct
atmel_private
*
priv
,
int
command
,
...
...
net/mac80211/debugfs_netdev.c
浏览文件 @
6c36810a
...
...
@@ -248,8 +248,8 @@ IEEE80211_IF_WFILE(min_discovery_timeout,
static
void
add_sta_files
(
struct
ieee80211_sub_if_data
*
sdata
)
{
DEBUGFS_ADD
(
drop_unencrypted
,
sta
);
DEBUGFS_ADD
(
force_unicast_rateidx
,
ap
);
DEBUGFS_ADD
(
max_ratectrl_rateidx
,
ap
);
DEBUGFS_ADD
(
force_unicast_rateidx
,
sta
);
DEBUGFS_ADD
(
max_ratectrl_rateidx
,
sta
);
DEBUGFS_ADD
(
state
,
sta
);
DEBUGFS_ADD
(
bssid
,
sta
);
...
...
@@ -283,8 +283,8 @@ static void add_ap_files(struct ieee80211_sub_if_data *sdata)
static
void
add_wds_files
(
struct
ieee80211_sub_if_data
*
sdata
)
{
DEBUGFS_ADD
(
drop_unencrypted
,
wds
);
DEBUGFS_ADD
(
force_unicast_rateidx
,
ap
);
DEBUGFS_ADD
(
max_ratectrl_rateidx
,
ap
);
DEBUGFS_ADD
(
force_unicast_rateidx
,
wds
);
DEBUGFS_ADD
(
max_ratectrl_rateidx
,
wds
);
DEBUGFS_ADD
(
peer
,
wds
);
}
...
...
@@ -292,8 +292,8 @@ static void add_wds_files(struct ieee80211_sub_if_data *sdata)
static
void
add_vlan_files
(
struct
ieee80211_sub_if_data
*
sdata
)
{
DEBUGFS_ADD
(
drop_unencrypted
,
vlan
);
DEBUGFS_ADD
(
force_unicast_rateidx
,
ap
);
DEBUGFS_ADD
(
max_ratectrl_rateidx
,
ap
);
DEBUGFS_ADD
(
force_unicast_rateidx
,
vlan
);
DEBUGFS_ADD
(
max_ratectrl_rateidx
,
vlan
);
}
static
void
add_monitor_files
(
struct
ieee80211_sub_if_data
*
sdata
)
...
...
@@ -381,8 +381,8 @@ static void add_files(struct ieee80211_sub_if_data *sdata)
static
void
del_sta_files
(
struct
ieee80211_sub_if_data
*
sdata
)
{
DEBUGFS_DEL
(
drop_unencrypted
,
sta
);
DEBUGFS_DEL
(
force_unicast_rateidx
,
ap
);
DEBUGFS_DEL
(
max_ratectrl_rateidx
,
ap
);
DEBUGFS_DEL
(
force_unicast_rateidx
,
sta
);
DEBUGFS_DEL
(
max_ratectrl_rateidx
,
sta
);
DEBUGFS_DEL
(
state
,
sta
);
DEBUGFS_DEL
(
bssid
,
sta
);
...
...
@@ -416,8 +416,8 @@ static void del_ap_files(struct ieee80211_sub_if_data *sdata)
static
void
del_wds_files
(
struct
ieee80211_sub_if_data
*
sdata
)
{
DEBUGFS_DEL
(
drop_unencrypted
,
wds
);
DEBUGFS_DEL
(
force_unicast_rateidx
,
ap
);
DEBUGFS_DEL
(
max_ratectrl_rateidx
,
ap
);
DEBUGFS_DEL
(
force_unicast_rateidx
,
wds
);
DEBUGFS_DEL
(
max_ratectrl_rateidx
,
wds
);
DEBUGFS_DEL
(
peer
,
wds
);
}
...
...
@@ -425,8 +425,8 @@ static void del_wds_files(struct ieee80211_sub_if_data *sdata)
static
void
del_vlan_files
(
struct
ieee80211_sub_if_data
*
sdata
)
{
DEBUGFS_DEL
(
drop_unencrypted
,
vlan
);
DEBUGFS_DEL
(
force_unicast_rateidx
,
ap
);
DEBUGFS_DEL
(
max_ratectrl_rateidx
,
ap
);
DEBUGFS_DEL
(
force_unicast_rateidx
,
vlan
);
DEBUGFS_DEL
(
max_ratectrl_rateidx
,
vlan
);
}
static
void
del_monitor_files
(
struct
ieee80211_sub_if_data
*
sdata
)
...
...
net/mac80211/ieee80211_i.h
浏览文件 @
6c36810a
...
...
@@ -470,6 +470,8 @@ struct ieee80211_sub_if_data {
struct
dentry
*
auth_transaction
;
struct
dentry
*
flags
;
struct
dentry
*
num_beacons_sta
;
struct
dentry
*
force_unicast_rateidx
;
struct
dentry
*
max_ratectrl_rateidx
;
}
sta
;
struct
{
struct
dentry
*
drop_unencrypted
;
...
...
@@ -483,9 +485,13 @@ struct ieee80211_sub_if_data {
struct
{
struct
dentry
*
drop_unencrypted
;
struct
dentry
*
peer
;
struct
dentry
*
force_unicast_rateidx
;
struct
dentry
*
max_ratectrl_rateidx
;
}
wds
;
struct
{
struct
dentry
*
drop_unencrypted
;
struct
dentry
*
force_unicast_rateidx
;
struct
dentry
*
max_ratectrl_rateidx
;
}
vlan
;
struct
{
struct
dentry
*
mode
;
...
...
net/mac80211/mesh.c
浏览文件 @
6c36810a
...
...
@@ -383,7 +383,7 @@ struct mesh_table *mesh_table_grow(struct mesh_table *tbl)
hlist_for_each_safe
(
p
,
q
,
&
newtbl
->
hash_buckets
[
i
])
tbl
->
free_node
(
p
,
0
);
}
__mesh_table_free
(
tbl
);
__mesh_table_free
(
new
tbl
);
endgrow:
return
NULL
;
}
...
...
net/mac80211/mlme.c
浏览文件 @
6c36810a
...
...
@@ -478,51 +478,21 @@ int ieee80211_ht_addt_info_ie_to_ht_bss_info(
static
void
ieee80211_sta_send_associnfo
(
struct
net_device
*
dev
,
struct
ieee80211_if_sta
*
ifsta
)
{
char
*
buf
;
size_t
len
;
int
i
;
union
iwreq_data
wrqu
;
if
(
!
ifsta
->
assocreq_ies
&&
!
ifsta
->
assocresp_ies
)
return
;
buf
=
kmalloc
(
50
+
2
*
(
ifsta
->
assocreq_ies_len
+
ifsta
->
assocresp_ies_len
),
GFP_KERNEL
);
if
(
!
buf
)
return
;
len
=
sprintf
(
buf
,
"ASSOCINFO("
);
if
(
ifsta
->
assocreq_ies
)
{
len
+=
sprintf
(
buf
+
len
,
"ReqIEs="
);
for
(
i
=
0
;
i
<
ifsta
->
assocreq_ies_len
;
i
++
)
{
len
+=
sprintf
(
buf
+
len
,
"%02x"
,
ifsta
->
assocreq_ies
[
i
]);
}
memset
(
&
wrqu
,
0
,
sizeof
(
wrqu
));
wrqu
.
data
.
length
=
ifsta
->
assocreq_ies_len
;
wireless_send_event
(
dev
,
IWEVASSOCREQIE
,
&
wrqu
,
ifsta
->
assocreq_ies
);
}
if
(
ifsta
->
assocresp_ies
)
{
if
(
ifsta
->
assocreq_ies
)
len
+=
sprintf
(
buf
+
len
,
" "
);
len
+=
sprintf
(
buf
+
len
,
"RespIEs="
);
for
(
i
=
0
;
i
<
ifsta
->
assocresp_ies_len
;
i
++
)
{
len
+=
sprintf
(
buf
+
len
,
"%02x"
,
ifsta
->
assocresp_ies
[
i
]);
}
}
len
+=
sprintf
(
buf
+
len
,
")"
);
if
(
len
>
IW_CUSTOM_MAX
)
{
len
=
sprintf
(
buf
,
"ASSOCRESPIE="
);
for
(
i
=
0
;
i
<
ifsta
->
assocresp_ies_len
;
i
++
)
{
len
+=
sprintf
(
buf
+
len
,
"%02x"
,
ifsta
->
assocresp_ies
[
i
]);
}
if
(
ifsta
->
assocresp_ies
)
{
memset
(
&
wrqu
,
0
,
sizeof
(
wrqu
));
wrqu
.
data
.
length
=
ifsta
->
assocresp_ies_len
;
wireless_send_event
(
dev
,
IWEVASSOCRESPIE
,
&
wrqu
,
ifsta
->
assocresp_ies
);
}
memset
(
&
wrqu
,
0
,
sizeof
(
wrqu
));
wrqu
.
data
.
length
=
len
;
wireless_send_event
(
dev
,
IWEVCUSTOM
,
&
wrqu
,
buf
);
kfree
(
buf
);
}
...
...
@@ -813,7 +783,7 @@ static void ieee80211_send_assoc(struct net_device *dev,
}
}
if
(
count
==
8
)
{
if
(
rates_len
>
count
)
{
pos
=
skb_put
(
skb
,
rates_len
-
count
+
2
);
*
pos
++
=
WLAN_EID_EXT_SUPP_RATES
;
*
pos
++
=
rates_len
-
count
;
...
...
@@ -2868,7 +2838,7 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
jiffies
);
#endif
/* CONFIG_MAC80211_IBSS_DEBUG */
if
(
beacon_timestamp
>
rx_timestamp
)
{
#if
n
def CONFIG_MAC80211_IBSS_DEBUG
#ifdef CONFIG_MAC80211_IBSS_DEBUG
printk
(
KERN_DEBUG
"%s: beacon TSF higher than "
"local TSF - IBSS merge with BSSID %s
\n
"
,
dev
->
name
,
print_mac
(
mac
,
mgmt
->
bssid
));
...
...
net/rfkill/rfkill.c
浏览文件 @
6c36810a
...
...
@@ -377,7 +377,7 @@ static ssize_t rfkill_claim_show(struct device *dev,
{
struct
rfkill
*
rfkill
=
to_rfkill
(
dev
);
return
sprintf
(
buf
,
"%d"
,
rfkill
->
user_claim
);
return
sprintf
(
buf
,
"%d
\n
"
,
rfkill
->
user_claim
);
}
static
ssize_t
rfkill_claim_store
(
struct
device
*
dev
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录