# #
#############################################################################*/
-#include <net/if.h>
+#include <linux/if.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
int ifindex;
// Interface Name
- char ifname[IF_NAMESIZE];
+ char ifname[IFNAMSIZ];
// MTU
uint32_t mtu;
return link->ifindex;
}
+// Carrier
+
+int nw_link_has_carrier(nw_link* link) {
+ return link->operstate == IF_OPER_UP;
+}
+
+static int nw_link_carrier_gained(nw_link* link) {
+ return 0; // XXX TODO
+}
+
+static int nw_link_carrier_lost(nw_link* link) {
+ return 0; // XXX TODO
+}
+
static int nw_link_update_ifname(nw_link* link, sd_netlink_message* message) {
const char* ifname = NULL;
int r;
// XXX We should log any changes here
+ // Fetch current carrier state
+ const int had_carrier = nw_link_has_carrier(link);
+
// Store the new flags & operstate
link->flags = flags;
link->operstate = operstate;
+ // Notify if carrier was gained or lost
+ if (!had_carrier && nw_link_has_carrier(link)) {
+ r = nw_link_carrier_gained(link);
+ if (r < 0)
+ return r;
+
+ } else if (had_carrier && !nw_link_has_carrier(link)) {
+ r = nw_link_carrier_lost(link);
+ if (r < 0)
+ return r;
+ }
return 0;
}
int nw_link_ifindex(nw_link* link);
const char* nw_link_name(nw_link* link);
+int nw_link_has_carrier(nw_link* link);
+
int nw_link_process(sd_netlink* rtnl, sd_netlink_message* message, void* data);
#endif /* NETWORKD_LINK_H */