|
@@ -42,6 +42,7 @@
|
|
|
#include <misc/ipv4_proto.h>
|
|
#include <misc/ipv4_proto.h>
|
|
|
#include <misc/udp_proto.h>
|
|
#include <misc/udp_proto.h>
|
|
|
#include <misc/dhcp_proto.h>
|
|
#include <misc/dhcp_proto.h>
|
|
|
|
|
+#include <misc/get_iface_info.h>
|
|
|
#include <base/BLog.h>
|
|
#include <base/BLog.h>
|
|
|
|
|
|
|
|
#include <dhcpclient/BDHCPClient.h>
|
|
#include <dhcpclient/BDHCPClient.h>
|
|
@@ -123,57 +124,6 @@ fail:
|
|
|
memset(out_mac, 0, 6);
|
|
memset(out_mac, 0, 6);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static int get_iface_info (const char *ifname, uint8_t *out_mac, int *out_mtu, int *out_ifindex)
|
|
|
|
|
-{
|
|
|
|
|
- struct ifreq ifr;
|
|
|
|
|
-
|
|
|
|
|
- int s = socket(AF_INET, SOCK_DGRAM, 0);
|
|
|
|
|
- if (!s) {
|
|
|
|
|
- BLog(BLOG_ERROR, "socket failed");
|
|
|
|
|
- goto fail0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // get MAC
|
|
|
|
|
- memset(&ifr, 0, sizeof(ifr));
|
|
|
|
|
- snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", ifname);
|
|
|
|
|
- if (ioctl(s, SIOCGIFHWADDR, &ifr)) {
|
|
|
|
|
- BLog(BLOG_ERROR, "ioctl(SIOCGIFHWADDR) failed");
|
|
|
|
|
- goto fail1;
|
|
|
|
|
- }
|
|
|
|
|
- if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
|
|
|
|
|
- BLog(BLOG_ERROR, "hardware address not ethernet");
|
|
|
|
|
- goto fail1;
|
|
|
|
|
- }
|
|
|
|
|
- memcpy(out_mac, ifr.ifr_hwaddr.sa_data, 6);
|
|
|
|
|
-
|
|
|
|
|
- // get MTU
|
|
|
|
|
- memset(&ifr, 0, sizeof(ifr));
|
|
|
|
|
- snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", ifname);
|
|
|
|
|
- if (ioctl(s, SIOCGIFMTU, &ifr)) {
|
|
|
|
|
- BLog(BLOG_ERROR, "ioctl(SIOCGIFMTU) failed");
|
|
|
|
|
- goto fail1;
|
|
|
|
|
- }
|
|
|
|
|
- *out_mtu = ifr.ifr_mtu;
|
|
|
|
|
-
|
|
|
|
|
- // get interface index
|
|
|
|
|
- memset(&ifr, 0, sizeof(ifr));
|
|
|
|
|
- snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", ifname);
|
|
|
|
|
- if (ioctl(s, SIOCGIFINDEX, &ifr)) {
|
|
|
|
|
- BLog(BLOG_ERROR, "ioctl(SIOCGIFINDEX) failed");
|
|
|
|
|
- goto fail1;
|
|
|
|
|
- }
|
|
|
|
|
- *out_ifindex = ifr.ifr_ifindex;
|
|
|
|
|
-
|
|
|
|
|
- close(s);
|
|
|
|
|
-
|
|
|
|
|
- return 1;
|
|
|
|
|
-
|
|
|
|
|
-fail1:
|
|
|
|
|
- close(s);
|
|
|
|
|
-fail0:
|
|
|
|
|
- return 0;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
int BDHCPClient_Init (BDHCPClient *o, const char *ifname, struct BDHCPClient_opts opts, BReactor *reactor, BRandom2 *random2, BDHCPClient_handler handler, void *user)
|
|
int BDHCPClient_Init (BDHCPClient *o, const char *ifname, struct BDHCPClient_opts opts, BReactor *reactor, BRandom2 *random2, BDHCPClient_handler handler, void *user)
|
|
|
{
|
|
{
|
|
|
// init arguments
|
|
// init arguments
|