mediatek: hnat: add ext-devices-prefix prop to match ext devices

This commit is contained in:
hanwckf
2024-01-14 10:53:20 +08:00
parent 42fbe2ced3
commit fb1028fa8c
4 changed files with 26 additions and 5 deletions

View File

@@ -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;

View File

@@ -690,6 +690,7 @@ struct mtk_hnat {
struct extdev_entry {
char name[IFNAMSIZ];
char name_prefix[IFNAMSIZ];
struct net_device *dev;
};

View File

@@ -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);
}

View File

@@ -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);