mediatek: hnat: add ext-devices-prefix prop to match ext devices
This commit is contained in:
@@ -762,6 +762,7 @@ static int hnat_probe(struct platform_device *pdev)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
index = 0;
|
||||
prop = of_find_property(np, "ext-devices", NULL);
|
||||
for (name = of_prop_next_string(prop, NULL); name;
|
||||
name = of_prop_next_string(prop, name), index++) {
|
||||
@@ -774,9 +775,22 @@ static int hnat_probe(struct platform_device *pdev)
|
||||
ext_if_add(ext_entry);
|
||||
}
|
||||
|
||||
index = 0;
|
||||
prop = of_find_property(np, "ext-devices-prefix", NULL);
|
||||
for (name = of_prop_next_string(prop, NULL); name;
|
||||
name = of_prop_next_string(prop, name), index++) {
|
||||
ext_entry = kzalloc(sizeof(*ext_entry), GFP_KERNEL);
|
||||
if (!ext_entry) {
|
||||
err = -ENOMEM;
|
||||
goto err_out1;
|
||||
}
|
||||
strncpy(ext_entry->name_prefix, (char *)name, IFNAMSIZ - 1);
|
||||
ext_if_add(ext_entry);
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_EXT_DEVS && hnat_priv->ext_if[i]; i++) {
|
||||
ext_entry = hnat_priv->ext_if[i];
|
||||
dev_info(&pdev->dev, "ext devices = %s\n", ext_entry->name);
|
||||
dev_info(&pdev->dev, "ext devices = %s, prefix = %s\n", ext_entry->name, ext_entry->name_prefix);
|
||||
}
|
||||
|
||||
hnat_priv->lvid = 1;
|
||||
|
||||
@@ -690,6 +690,7 @@ struct mtk_hnat {
|
||||
|
||||
struct extdev_entry {
|
||||
char name[IFNAMSIZ];
|
||||
char name_prefix[IFNAMSIZ];
|
||||
struct net_device *dev;
|
||||
};
|
||||
|
||||
|
||||
@@ -1732,8 +1732,8 @@ static int hnat_ext_show(struct seq_file *m, void *private)
|
||||
for (i = 0; i < MAX_EXT_DEVS && hnat_priv->ext_if[i]; i++) {
|
||||
ext_entry = hnat_priv->ext_if[i];
|
||||
if (ext_entry->dev)
|
||||
seq_printf(m, "ext devices [%d] = %s (dev=%p, ifindex=%d)\n",
|
||||
i, ext_entry->name, ext_entry->dev,
|
||||
seq_printf(m, "ext devices [%d] = %s, (dev=%p, ifindex=%d)\n",
|
||||
i, ext_entry->dev->name, ext_entry->dev,
|
||||
ext_entry->dev->ifindex);
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,10 @@ static inline int find_extif_from_devname(const char *name)
|
||||
|
||||
for (i = 0; i < MAX_EXT_DEVS && hnat_priv->ext_if[i]; i++) {
|
||||
ext_entry = hnat_priv->ext_if[i];
|
||||
if (!strcmp(name, ext_entry->name))
|
||||
if (strlen(ext_entry->name) && !strcmp(name, ext_entry->name))
|
||||
return 1;
|
||||
|
||||
if (strlen(ext_entry->name_prefix) && !strncmp(name, ext_entry->name_prefix, strlen(ext_entry->name_prefix)))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@@ -128,7 +131,10 @@ static inline int extif_set_dev(struct net_device *dev)
|
||||
|
||||
for (i = 0; i < MAX_EXT_DEVS && hnat_priv->ext_if[i]; i++) {
|
||||
ext_entry = hnat_priv->ext_if[i];
|
||||
if (!strcmp(dev->name, ext_entry->name) && !ext_entry->dev) {
|
||||
if (((strlen(ext_entry->name) && !strcmp(dev->name, ext_entry->name))
|
||||
|| (strlen(ext_entry->name_prefix) && !strncmp(dev->name, ext_entry->name_prefix, strlen(ext_entry->name_prefix))))
|
||||
&& !ext_entry->dev)
|
||||
{
|
||||
dev_hold(dev);
|
||||
ext_entry->dev = dev;
|
||||
pr_info("%s(%s)\n", __func__, dev->name);
|
||||
|
||||
Reference in New Issue
Block a user