aboutsummaryrefslogtreecommitdiff
path: root/lib/netdev-linux.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2013-08-02 12:19:49 -0700
committerBen Pfaff <blp@nicira.com>2013-08-02 12:24:18 -0700
commit96172faa345dbd8763fc3b1b64319c384d0a0798 (patch)
treea2ec04203e90aae5072324fcf9b3cda85fe874f2 /lib/netdev-linux.c
parent7d6ce2d189332aac67d65c73c582d57a17b7ac70 (diff)
netdev-linux: Don't assume 'struct netdev' has offset 0.
The data items returned by netdev_get_devices() are "struct netdev *"s. The code fixed up by this commit used them as "struct netdev_linux *", which happens to work because struct netdev happens to be at offset 0 in each struct but it's better to do a proper cast in case someday struct netdev gets moved to a nonzero offset. Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/netdev-linux.c')
-rw-r--r--lib/netdev-linux.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index 55f676a5..29d8ad96 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -557,9 +557,10 @@ netdev_linux_cache_cb(const struct rtnetlink_link_change *change,
shash_init(&device_shash);
netdev_get_devices(&netdev_linux_class, &device_shash);
SHASH_FOR_EACH (node, &device_shash) {
+ struct netdev *netdev = node->data;
unsigned int flags;
- dev = node->data;
+ dev = netdev_linux_cast(netdev);
get_flags(&dev->up, &flags);
netdev_linux_changed(dev, flags, 0);
@@ -1194,7 +1195,8 @@ netdev_linux_miimon_run(void)
shash_init(&device_shash);
netdev_get_devices(&netdev_linux_class, &device_shash);
SHASH_FOR_EACH (node, &device_shash) {
- struct netdev_linux *dev = node->data;
+ struct netdev *netdev = node->data;
+ struct netdev_linux *dev = netdev_linux_cast(netdev);
bool miimon;
if (dev->miimon_interval <= 0 || !timer_expired(&dev->miimon_timer)) {
@@ -1222,7 +1224,8 @@ netdev_linux_miimon_wait(void)
shash_init(&device_shash);
netdev_get_devices(&netdev_linux_class, &device_shash);
SHASH_FOR_EACH (node, &device_shash) {
- struct netdev_linux *dev = node->data;
+ struct netdev *netdev = node->data;
+ struct netdev_linux *dev = netdev_linux_cast(netdev);
if (dev->miimon_interval > 0) {
timer_wait(&dev->miimon_timer);