projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wireless: fix teardown, always pass the previous config to the teardown handler inste...
[project/netifd.git]
/
macvlan.c
diff --git
a/macvlan.c
b/macvlan.c
index
bf81340
..
051fe05
100644
(file)
--- a/
macvlan.c
+++ b/
macvlan.c
@@
-17,7
+17,11
@@
#include <stdio.h>
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <assert.h>
#include <errno.h>
+#include <net/ethernet.h>
+
+#ifdef linux
#include <netinet/ether.h>
#include <netinet/ether.h>
+#endif
#include "netifd.h"
#include "device.h"
#include "netifd.h"
#include "device.h"
@@
-40,6
+44,9
@@
static const struct blobmsg_policy macvlan_attrs[__MACVLAN_ATTR_MAX] = {
static const struct uci_blob_param_list macvlan_attr_list = {
.n_params = __MACVLAN_ATTR_MAX,
.params = macvlan_attrs,
static const struct uci_blob_param_list macvlan_attr_list = {
.n_params = __MACVLAN_ATTR_MAX,
.params = macvlan_attrs,
+
+ .n_next = 1,
+ .next = { &device_attr_list },
};
struct macvlan_device {
};
struct macvlan_device {
@@
-65,6
+72,12
@@
macvlan_base_cb(struct device_user *dev, enum device_event ev)
case DEV_EVENT_REMOVE:
device_set_present(&mvdev->dev, false);
break;
case DEV_EVENT_REMOVE:
device_set_present(&mvdev->dev, false);
break;
+ case DEV_EVENT_LINK_UP:
+ device_set_link(&mvdev->dev, true);
+ break;
+ case DEV_EVENT_LINK_DOWN:
+ device_set_link(&mvdev->dev, false);
+ break;
default:
return;
}
default:
return;
}
@@
-127,6
+140,7
@@
macvlan_free(struct device *dev)
mvdev = container_of(dev, struct macvlan_device, dev);
device_remove_user(&mvdev->parent);
mvdev = container_of(dev, struct macvlan_device, dev);
device_remove_user(&mvdev->parent);
+ free(mvdev->config_data);
free(mvdev);
}
free(mvdev);
}
@@
-184,6
+198,7
@@
macvlan_reload(struct device *dev, struct blob_attr *attr)
struct macvlan_device *mvdev;
mvdev = container_of(dev, struct macvlan_device, dev);
struct macvlan_device *mvdev;
mvdev = container_of(dev, struct macvlan_device, dev);
+ attr = blob_memdup(attr);
blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
blob_data(attr), blob_len(attr));
blobmsg_parse(device_attr_list.params, __DEV_ATTR_MAX, tb_dev,
blob_data(attr), blob_len(attr));
@@
-213,6
+228,7
@@
macvlan_reload(struct device *dev, struct blob_attr *attr)
macvlan_config_init(dev);
}
macvlan_config_init(dev);
}
+ free(mvdev->config_data);
mvdev->config_data = attr;
return ret;
}
mvdev->config_data = attr;
return ret;
}
@@
-245,6
+261,7
@@
macvlan_create(const char *name, struct blob_attr *attr)
const struct device_type macvlan_device_type = {
.name = "MAC VLAN",
.config_params = &macvlan_attr_list,
const struct device_type macvlan_device_type = {
.name = "MAC VLAN",
.config_params = &macvlan_attr_list,
+ .keep_link_status = true,
.create = macvlan_create,
.config_init = macvlan_config_init,
.create = macvlan_create,
.config_init = macvlan_config_init,