e.g. option macaddr "@eth0" tells netifd to use the MAC of interface eth0.
Use case: set MAC address of a bridge interface to a specific interface's
MAC regardless of bridge/interface initialization order.

Signed-off-by: Günther Kelleter <guenther.kelle...@devolo.de>
---
 device.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/device.c b/device.c
index 82596e4..c63ddc7 100644
--- a/device.c
+++ b/device.c
@@ -256,7 +256,21 @@ device_init_settings(struct device *dev, struct blob_attr 
**tb)
        }
 
        if ((cur = tb[DEV_ATTR_MACADDR])) {
-               ea = ether_aton(blobmsg_data(cur));
+               const char *data = blobmsg_data(cur);
+               struct device_settings ds = {0};
+               if (data[0] == '@') {
+                       struct device dev = {0};
+                       strncpy(dev.ifname, data + 1, sizeof dev.ifname);
+                       dev.ifname[sizeof dev.ifname - 1] = '\0';
+                       system_if_get_settings(&dev, &ds);
+                       if (ds.flags & DEV_OPT_MACADDR) {
+                               ea = (struct ether_addr *)ds.macaddr;
+                       } else {
+                               ea = NULL;
+                       }
+               } else {
+                       ea = ether_aton(blobmsg_data(cur));
+               }
                if (ea) {
                        memcpy(s->macaddr, ea, 6);
                        s->flags |= DEV_OPT_MACADDR;
-- 
2.10.0.100.gddd73ec


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to