static int default_interface_print(struct re_printf *pf, void *unused) { char ifname[64]; (void)unused; if (0 == net_rt_default_get(AF_INET, ifname, sizeof(ifname))) return re_hprintf(pf, "%s", ifname); else return re_hprintf(pf, "eth0"); }
/** * Get the IP-address of the default gateway * * @param af Address Family * @param gw Returned Gateway address * * @return 0 if success, otherwise errorcode */ int net_default_gateway_get(int af, struct sa *gw) { char ifname[64]; void *argv[2]; int err; if (!af || !gw) return EINVAL; err = net_rt_default_get(af, ifname, sizeof(ifname)); if (err) return err; argv[0] = ifname; argv[1] = gw; err = net_rt_list(net_rt_handler, argv); if (err) return err; return 0; }
/** * Get the default source IP address * * @param af Address Family * @param ip Returned IP address * * @return 0 if success, otherwise errorcode */ int net_default_source_addr_get(int af, struct sa *ip) { #if defined(WIN32) return net_hostaddr(af, ip); #else char ifname[64] = ""; #ifdef HAVE_ROUTE_LIST /* Get interface with default route */ (void)net_rt_default_get(af, ifname, sizeof(ifname)); #endif /* First try with default interface */ if (0 == net_if_getaddr(ifname, af, ip)) return 0; /* Then try first real IP */ if (0 == net_if_getaddr(NULL, af, ip)) return 0; return net_if_getaddr4(ifname, af, ip); #endif }