};
struct connman_iface {
- struct connman_iface_driver *driver;
char *path;
char *udi;
char *sysfs;
enum connman_iface_flags flags;
enum connman_iface_state state;
struct connman_ipv4 ipv4;
+
+ struct connman_iface_driver *driver;
+ void *driver_data;
};
struct connman_iface_driver {
int (*connect) (struct connman_iface *iface,
struct connman_network *network);
+ void (*rtnl_carrier) (struct connman_iface *iface, int carrier);
void (*rtnl_wireless) (struct connman_iface *iface,
void *data, unsigned short len);
};
extern int connman_iface_register(struct connman_iface_driver *driver);
extern void connman_iface_unregister(struct connman_iface_driver *driver);
+static inline void *connman_iface_get_data(struct connman_iface *iface)
+{
+ return iface->driver_data;
+}
+
+static inline void connman_iface_set_data(struct connman_iface *iface,
+ void *data)
+{
+ iface->driver_data = data;
+}
+
extern int connman_iface_update(struct connman_iface *iface,
enum connman_iface_state state);
+extern void connman_iface_indicate_carrier(struct connman_iface *iface,
+ int carrier);
+
#ifdef __cplusplus
}
#endif
return 0;
}
+void connman_iface_indicate_carrier(struct connman_iface *iface, int carrier)
+{
+ DBG("iface %p carrier %d", iface, carrier);
+}
+
static DBusMessage *enable_iface(DBusConnection *conn,
DBusMessage *msg, void *data)
{
(char *) RTA_DATA(attr));
}
+static inline void print_byte(struct rtattr *attr, const char *name)
+{
+ printf(" attr %s (len %d) 0x%02x\n", name, RTA_PAYLOAD(attr),
+ *((unsigned char *) RTA_DATA(attr)));
+}
+
static inline void print_attr(struct rtattr *attr, const char *name)
{
if (name)
if ((iface->flags & CONNMAN_IFACE_FLAG_RTNL) == 0)
return;
- if (iface->carrier != (msg->ifi_flags & IFF_RUNNING)) {
- iface->carrier = (msg->ifi_flags & IFF_RUNNING);
- DBG("carrier %s", iface->carrier ? "on" : "off");
+ if (iface->carrier != ((msg->ifi_flags & IFF_RUNNING) != 0)) {
+ iface->carrier = ((msg->ifi_flags & IFF_RUNNING) != 0);
+ if (iface->driver->rtnl_carrier)
+ iface->driver->rtnl_carrier(iface, iface->carrier);
+ else
+ connman_iface_indicate_carrier(iface, iface->carrier);
}
for (attr = IFLA_RTA(msg); RTA_OK(attr, bytes);
print_attr(attr, "weight");
break;
case IFLA_OPERSTATE:
- print_attr(attr, "operstate");
+ print_byte(attr, "operstate");
break;
case IFLA_LINKMODE:
- print_attr(attr, "linkmode");
+ print_byte(attr, "linkmode");
break;
default:
print_attr(attr, NULL);