hnat:refine ppd device setting
This commit is contained in:
parent
8aadb539a5
commit
352a36cbd0
@ -34,10 +34,9 @@
|
||||
#include "../mtk_eth_reset.h"
|
||||
|
||||
extern atomic_t eth1_in_br;
|
||||
atomic_t eth0_in_br;
|
||||
struct net_device *br_dev;
|
||||
struct net_device *eth1_dev;
|
||||
struct net_device *eth0_dev;
|
||||
|
||||
|
||||
#define do_ge2ext_fast(dev, skb) \
|
||||
((IS_LAN(dev) || IS_WAN(dev) || IS_PPD(dev)) && \
|
||||
@ -338,26 +337,12 @@ static void gmac_ppe_fwd_enable(struct net_device *dev)
|
||||
set_gmac_ppe_fwd(1, 1);
|
||||
}
|
||||
|
||||
int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
void *ptr)
|
||||
void ppd_dev_setting(void)
|
||||
{
|
||||
struct net_device *dev;
|
||||
|
||||
dev = netdev_notifier_info_to_dev(ptr);
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_UP:
|
||||
if (!hnat_priv->guest_en) {
|
||||
if (!strcmp(dev->name, "ra1") || !strcmp(dev->name, "rax1"))
|
||||
break;
|
||||
}
|
||||
|
||||
br_dev = __dev_get_by_name(&init_net, "br-lan");
|
||||
eth1_dev = __dev_get_by_name(&init_net, "eth1");
|
||||
eth0_dev = __dev_get_by_name(&init_net, "eth0");
|
||||
atomic_set(ð1_in_br, 0);
|
||||
atomic_set(ð0_in_br, 0);
|
||||
if (br_dev && eth1_dev) {
|
||||
br_dev = __dev_get_by_name(&init_net, "br-lan");
|
||||
eth1_dev = __dev_get_by_name(&init_net, "eth1");
|
||||
atomic_set(ð1_in_br, 0);
|
||||
if (br_dev && eth1_dev) {
|
||||
struct net_device *dev;
|
||||
struct list_head *pos;
|
||||
netdev_for_each_lower_dev(br_dev, dev, pos) {
|
||||
@ -367,29 +352,38 @@ int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
}
|
||||
}
|
||||
}
|
||||
if (br_dev && eth0_dev) {
|
||||
struct net_device *dev;
|
||||
struct list_head *pos;
|
||||
netdev_for_each_lower_dev(br_dev, dev, pos) {
|
||||
if (dev == eth0_dev) {
|
||||
atomic_set(ð0_in_br, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (atomic_read(ð1_in_br)){
|
||||
printk("eth1 in br-lan");
|
||||
hnat_priv->g_ppdev = __dev_get_by_name(&init_net, "eth1"); }
|
||||
else if (atomic_read(ð0_in_br)){
|
||||
printk("eth0 in br-lan");
|
||||
hnat_priv->g_ppdev = __dev_get_by_name(&init_net, "eth1");
|
||||
}
|
||||
else {
|
||||
printk("eth0 in br-lan");
|
||||
hnat_priv->g_ppdev = __dev_get_by_name(&init_net, "eth0");
|
||||
}
|
||||
}
|
||||
|
||||
int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
void *ptr)
|
||||
{
|
||||
struct net_device *dev;
|
||||
|
||||
dev = netdev_notifier_info_to_dev(ptr);
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_UP:
|
||||
ppd_dev_setting();
|
||||
if (!hnat_priv->guest_en) {
|
||||
if (!strcmp(dev->name, "ra1") || !strcmp(dev->name, "rax1"))
|
||||
break;
|
||||
}
|
||||
gmac_ppe_fwd_enable(dev);
|
||||
|
||||
extif_set_dev(dev, 1);
|
||||
|
||||
break;
|
||||
case NETDEV_GOING_DOWN:
|
||||
ppd_dev_setting();
|
||||
if (!get_wifi_hook_if_index_from_dev(dev))
|
||||
extif_put_dev(dev);
|
||||
|
||||
@ -397,6 +391,7 @@ int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
|
||||
break;
|
||||
case NETDEV_CHANGE:
|
||||
ppd_dev_setting();
|
||||
/* Clear PPE entries if the slave of bond device physical link down */
|
||||
if (!netif_is_bond_slave(dev) ||
|
||||
(!IS_LAN(dev) && !IS_WAN(dev)))
|
||||
@ -406,6 +401,7 @@ int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
foe_clear_ethdev_bind_entries(dev);
|
||||
break;
|
||||
case NETDEV_UNREGISTER:
|
||||
ppd_dev_setting();
|
||||
if (hnat_priv->g_ppdev == dev) {
|
||||
hnat_priv->g_ppdev = NULL;
|
||||
}
|
||||
@ -416,6 +412,7 @@ int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
|
||||
break;
|
||||
case NETDEV_REGISTER:
|
||||
ppd_dev_setting();
|
||||
if (IS_WAN(dev) && !hnat_priv->g_wandev)
|
||||
hnat_priv->g_wandev = dev_get_by_name(&init_net, hnat_priv->wan);
|
||||
|
||||
@ -425,6 +422,7 @@ int nf_hnat_netdevice_event(struct notifier_block *unused, unsigned long event,
|
||||
hnat_warm_init();
|
||||
break;
|
||||
default:
|
||||
ppd_dev_setting();
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user