hw->mac_address_size = CATTA_MAC_ADDRESS_MAX;
memcpy(hw->mac_address, row.PhysicalAddress, hw->mac_address_size);
- // XXX debugging, remove
- {
- char mac[256];
- catta_log_debug(" name: %s\n"
- " mtu: %d\n"
- " mac: %s\n"
- " flags_ok: %d\n"
- " type: %u\n"
- " status: %u\n"
- " multicast: %d\n"
- " access type: %d",
- hw->name,
- hw->mtu,
- catta_format_mac_address(mac, sizeof(mac), hw->mac_address, hw->mac_address_size),
- hw->flags_ok,
- (unsigned int)row.Type,
- (unsigned int)row.OperStatus,
- multicast,
- (int)row.AccessType);
- }
-
catta_hw_interface_check_relevant(hw);
catta_hw_interface_update_rrs(hw, 0);
}
CattaInterface *iface;
CattaHwInterface *hw;
- // XXX debug, remove
- {
- const char *typestr = NULL;
-
- switch(type) {
- case MibParameterNotification: typestr = "ParameterNotification"; break;
- case MibAddInstance: typestr = "AddInstance"; break;
- case MibDeleteInstance: typestr = "DeleteInstance"; break;
- default: typestr = "Unknown";
- }
-
- catta_log_debug("interface %s on iface %d for %s", typestr, idx, protostr);
- }
-
// see if we know this interface
iface = catta_interface_monitor_get_interface(m, idx, proto);
hw = iface ? iface->hardware : catta_interface_monitor_get_hw_interface(m, idx);
addr.proto = catta_af_to_proto(row->Address.si_family);
protostr = catta_proto_to_string(addr.proto);
- // XXX debug, remove
- {
- const char *typestr = NULL;
- char buf[CATTA_ADDRESS_STR_MAX];
-
- switch(type) {
- case MibParameterNotification: typestr = "ParameterNotification"; break;
- case MibAddInstance: typestr = "AddInstance"; break;
- case MibDeleteInstance: typestr = "DeleteInstance"; break;
- default: typestr = "Unknown";
- }
-
- catta_log_debug("%s for %s address %s on iface %d",
- typestr, protostr,
- catta_address_snprint(buf, sizeof(buf), &addr),
- idx);
- }
-
// see if we know this address/interface
iface = catta_interface_monitor_get_interface(m, idx, addr.proto);
ifaddr = iface ? catta_interface_monitor_get_address(m, iface, &addr) : NULL;
assert(ifaddr != NULL);
set_global_scope_flag(ifaddr, &addr);
- catta_log_debug(" global_scope: %d", ifaddr->global_scope); // XXX debugging, remove
break;
case MibDeleteInstance:
if(ifaddr)
catta_log_error("pipe() in catta_interface_monitor_init_osdep failed");
return -1;
}
- catta_set_nonblock(m->osdep.pipefd[0]);
- catta_set_nonblock(m->osdep.pipefd[1]);
+ if(catta_set_nonblock(m->osdep.pipefd[0]) < 0 ||
+ catta_set_nonblock(m->osdep.pipefd[1]) < 0)
+ {
+ catta_log_error(__FILE__": catta_set_nonblock failed: %s", errnostrsocket());
+ goto fail;
+ }
m->osdep.icnhandle = NULL;
m->osdep.acnhandle = NULL;
m);
if(!m->osdep.watch) {
catta_log_error(__FILE__": Failed to create watch.");
- return -1;
+ goto fail;
}
// request async notification on interface changes
catta_log_error("NotifyUnicastIpAddressChange failed: %u", (unsigned int)r);
return 0;
+
+fail:
+ closesocket(m->osdep.pipefd[0]);
+ closesocket(m->osdep.pipefd[1]);
+ return -1;
}
void catta_interface_monitor_free_osdep(CattaInterfaceMonitor *m)