lantiq: create ATM/PTM interfaces with dsl as netdev name

Renaming an atm etherbride using 'ip link' (via hotplug) is racy since the
original netdev might disappear before br2684ctl has finished appling it's
setting:

 local2.notice br2684ctl[1667]: Interface "nas0" created sucessfully
 local2.notice br2684ctl[1667]: Communicating over ATM 0.8.35, encapsulation: LLC
 kern.info kernel: dsl0: renamed from nas0
 kern.err kernel: br2684:br2684_regvcc: tried to attach to non-existent device
 local2.err br2684ctl[1667]: Could not configure interface:No such device or address

By passing the final used netdev name to br2684ctl_wrap another race
condition workaround will be enabled again.

Change the lantiq ptm driver to create a netdev with the name dsl as well.
Albeit the rename via 'ip link' works fine so far, using a different
approach for ptm then atm could be confusing.

Signed-off-by: Mathias Kresin <dev@kresin.me>
This commit is contained in:
Mathias Kresin 2018-01-06 17:30:38 +01:00
parent e4936a957d
commit d3fd38637f
4 changed files with 17 additions and 5 deletions

View file

@ -254,7 +254,7 @@ static struct net_device_ops g_ptm_netdev_ops = {
#endif #endif
static struct net_device *g_net_dev[2] = {0}; static struct net_device *g_net_dev[2] = {0};
static char *g_net_dev_name[2] = {"ptm0", "ptmfast0"}; static char *g_net_dev_name[2] = {"dsl0", "dslfast0"};
#ifdef CONFIG_IFX_PTM_RX_TASKLET #ifdef CONFIG_IFX_PTM_RX_TASKLET
static struct tasklet_struct g_ptm_tasklet[] = { static struct tasklet_struct g_ptm_tasklet[] = {
@ -927,8 +927,8 @@ static int proc_read_wanmib(char *page, char **start, off_t off, int count, int
int len = 0; int len = 0;
int i; int i;
char *title[] = { char *title[] = {
"ptm0\n", "dsl0\n",
"ptmfast0\n" "dslfast0\n"
}; };
for ( i = 0; i < ARRAY_SIZE(title); i++ ) { for ( i = 0; i < ARRAY_SIZE(title); i++ ) {

View file

@ -121,7 +121,7 @@ static struct net_device_ops g_ptm_netdev_ops = {
}; };
static struct net_device *g_net_dev[1] = {0}; static struct net_device *g_net_dev[1] = {0};
static char *g_net_dev_name[1] = {"ptm0"}; static char *g_net_dev_name[1] = {"dsl0"};
static int g_ptm_prio_queue_map[8]; static int g_ptm_prio_queue_map[8];

View file

@ -229,7 +229,7 @@ buffalo,wbmr-300hpd)
esac esac
ls /lib/modules/$(uname -r)/ltq_atm* 1> /dev/null 2>&1 && \ ls /lib/modules/$(uname -r)/ltq_atm* 1> /dev/null 2>&1 && \
ucidef_add_atm_bridge "$vpi" "$vci" "$encaps" "$payload" ucidef_add_atm_bridge "$vpi" "$vci" "$encaps" "$payload" "dsl"
if lantiq_is_vdsl_system; then if lantiq_is_vdsl_system; then
ucidef_add_vdsl_modem "$annex" "$tone" "$xfer_mode" ucidef_add_vdsl_modem "$annex" "$tone" "$xfer_mode"

View file

@ -29,6 +29,17 @@ rename_xdsl_ifname()
IFNAME_CHANGED=1 IFNAME_CHANGED=1
} }
add_atm_bridge_nameprefix()
{
local cfg="$1"
config_get nameprefix "$cfg" nameprefix
[ -z "$nameprefix" ] || return
uci set network.${cfg}.nameprefix="dsl"
IFNAME_CHANGED=1
}
migrate_network_xdsl_ifname() migrate_network_xdsl_ifname()
{ {
rename_xdsl_ifname network "$1" ifname rename_xdsl_ifname network "$1" ifname
@ -42,6 +53,7 @@ migrate_led_xdsl_ifname()
config_load network config_load network
config_foreach migrate_network_xdsl_ifname config_foreach migrate_network_xdsl_ifname
config_foreach add_atm_bridge_nameprefix atm-bridge
[ "$IFNAME_CHANGED" = "1" ] && uci commit network [ "$IFNAME_CHANGED" = "1" ] && uci commit network